在使用小部件命令 add_widget 和 clear_widgets 时,我的小部件本身看起来很好,在屏幕的左下角非常小。
我将在这里解释我的所有步骤,所以请多多包涵。
我有一个系统可以从一个小部件切换到另一个小部件。“小部件”基本上是整个表单、基本画布和布局。
据我了解,这些必须具有基本布局。所以首先我把一个根元素放进去,然后我用这个根初始化我的 UI 管理器。
class MyApp(App):
rootForm = BoxLayout()
ui = UserInterface(rootForm)
return rootForm
我的 UI 处理小部件的切换。它在创建时将所有小部件保存在一个列表中。它还为自己提供了对用户界面的引用,用于回调目的。
class UserInterface():
__WidgetDictionary = {}
__RootWidget = None
def __init__(self, inRootWidget):
self.__RootWidget = inRootWidget # Keep track of our root
# Generate two forms to be swapped in/out
self.__WidgetDictionary["form1"] = FirstWidget()
self.__WidgetDictionary["form1"].SetUIreference(self)
self.__WidgetDictionary["form2"] = SecondWidget()
self.__WidgetDictionary["form2"].SetUIReference(self)
self.ChangeWidget("MainMenu")
ChangeWidget,这里真正的核心,清除了根小部件并添加了一个新小部件。
def ChangeWidget(self, inWidgetName):
self.__RootWidget.clear_widgets() # Clear out the widgets
self.__RootWidget.add_widget( self.__WidgetDictionary[inWidgetName] ) # Add our new widget
这可以很好地显示我的表单,并带有一个按钮。单击该按钮时,它附加了一个回调以将表单从 Form1 更改为 Form2。
#FirstWidget.py
class FirstWidget(BoxLayout):
__UserInterfaceReference = None
def SetUIReference(self, inUserInterface):
self.__UserInterfaceReference = inUserInterface
def ChangeWidget(self, inWidgetName):
self.__UserInterfaceReference.ChangeWidget(inWidgetName)
对应的.kv文件
#FirstWidget.kv
<FirstWidget>:
BoxLayout:
orientation: 'vertical'
padding: 50
spacing: 10
Button:
on_release: root.ChangeWidget('form2')
单击按钮后,将发生错误。Form1 和 Form2 几乎相同。Form2 比 form2 多一个按钮。Form1 和 Form2 的代码完全相同,只是类名不同。同样,在它自己的环境中,form2 看起来很完美。
这是该错误的屏幕截图:
编辑:暂时,我切换到使用屏幕管理器:http: //kivy.org/docs/api-kivy.uix.screenmanager.html