Kivy:弹出窗口只能有一个小部件作为内容(当我导入两个不同的弹出模块时)



我正在使用kivy设计一个应用程序,其中我需要两个不同的弹出窗口小部件。我用"kv"语言设计了它们。当我在项目文件中导入这些Popup模块时,它抛出:

'Popup只能有一个小部件作为内容'

这是我的项目文件。

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()

弹出1.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)

弹出2.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>(加载规则时,它将应用于加载kv后在App中创建的Popup的所有实例。通常,如果您希望将不同的规则应用于Popup的不同实例,则可以使用Popup的子类(如您所知(,并为每个子类加载不同的规则。

您可能希望将Popup1.kv中的规则更改为<Popup1Window>,类似地,在Popup2.kv中将规则更改为<Popup2Window>

最新更新