python - Kivy:弹出窗口只能有一个小部件作为内容(当我导入两个不同的弹出模块时)
问题描述
我正在使用 kivy 设计一个应用程序,我需要两个不同的弹出窗口小部件。我使用“kv”语言设计了它们。当我在我的项目文件中导入这些弹出模块时,它会抛出:
'弹出窗口只能有一个小部件作为内容'
这是我的项目文件。
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from myPopups.Popup1 import Popup1Window
from myPopups.Popup2 import Popup2Window
Builder.load_file('project.kv')
class ProjectWindow(BoxLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.mypopup1 = Popup1Window()
self.mypopup2 = Popup2Window()
Popup1.kv 文件
<Popup>:
size_hint: 0.4,0.5
auto_dismiss:True
title: 'Popup 1'
id:mypopup1
orientation: "vertical"
BoxLayout:
id: header1
orientation:'vertical'
size_hint_y:1
size_hint_x:1
padding:3
canvas.before:
Color:
rgba:(.06,.35,.45,1)
BoxLayout:
id:text_box1
size_hint_y:None
size_hint_x:1
height:60
TextInput:
id:txt_qty1
text:''
multiline:False
halign: 'center'
valign: 'middle'
font_size:30
GridLayout:
id:popup_numpad1
size_hint_y:None
size_hint_x:1
# spacing:'3'
height:230
rows:4
cols:3
spacing:4
Button:
text: 'Popup 1 Button'
bold:True
font_size:17
background_normal:''
background_color:(.06,.45,.45,1)
Popup1.py 文件
import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
Builder.load_file('myPopus/popup1.kv')
class Popup1Window(Popup):
def __init__(self, **kwargs):
super().__init__(**kwargs)
print("This is Popup 1")
同样,Popup2.kv 文件
<Popup>:
size_hint: 0.4,0.5
auto_dismiss:True
title: 'Popup 2'
id:mypopup2
orientation: "vertical"
BoxLayout:
id: header2
orientation:'vertical'
size_hint_y:1
size_hint_x:1
padding:3
canvas.before:
Color:
rgba:(.06,.35,.45,1)
BoxLayout:
id:text_box2
size_hint_y:None
size_hint_x:1
height:60
TextInput:
id:txt_qty2
text:''
multiline:False
halign: 'center'
valign: 'middle'
font_size:30
GridLayout:
id:popup_numpad2
size_hint_y:None
size_hint_x:1
# spacing:'3'
height:230
rows:4
cols:3
spacing:4
Button:
text: 'Popup 2 Button'
bold:True
font_size:17
background_normal:''
background_color:(.06,.45,.45,1)
Popup2.py 文件
import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
Builder.load_file('myPopus/popup2.kv')
class Popup2Window(Popup):
def __init__(self, **kwargs):
super().__init__(**kwargs)
print("This is Popup 2")
请在这方面帮助我。谢谢。
解决方案
您的kv
每个文件都包含一个<Popup>
. 当第二个kv
文件被加载时,第二个<Popup>
规则的内容被添加到第一个规则中,从而产生一个最终的规则,<Popup>
它有两个孩子Popup
。当您为类(如<Popup>
)加载规则时,它适用于Popup
在App
加载kv
. 通常,如果您希望将不同的规则应用于不同的实例Popup
,您将使用Popup
(如您所拥有的)的子类,并为每个子类加载不同的规则。
您可能希望将规则更改Popup1.kv
为<Popup1Window>
,类似地,Popup2.kv
将规则更改为<Popup2Window>
。
推荐阅读
- azure - IoT Edge 解决方案的当前 Application Insights 集成最佳实践
- arrays - 如何转阵列
在 pyspark 中解释? - ruby - 在使用 Ruby 编码倒带文件后,第 1 行中的非法引用 (CSV::MalformedCSVError)
- oracle - GoldenGate OGG-01296 错误是什么意思?
- java - Android Cordova 应用程序的条件编译
- datepicker - 有没有办法从 CoreData 设置起始 DatePicker 值?
- amazon-web-services - 如何通过 AWS EC2 将 DataFrames 从 Pycharm 传输到 AWS S3?
- spring-boot - Spring Boot - 无法通过 Zuul 代理获得 Keycloak 授权 api 的响应
- docker - 如何只显示某个 docker 服务的一个副本的日志而不包括其名称?
- android - 更新由管理的视图的属性“defaultSrc”时出错:RCTImageView(android 发布前报告)