【发布时间】:2023-01-07 02:38:19
【问题描述】:
我有一个屏幕管理器中有屏幕管理器的程序,试图创建一个更动态的用户界面(我认为这会导致性能很差)。问题是我需要一个屏幕管理器中的类中的按钮来切换另一个屏幕。
但是,带有按钮的类无法访问屏幕管理器的实例,因为它本身位于不同的类中。我试图将实例作为变量传递,但我认为事件顺序发生的顺序错误,因此没有传递任何内容。
我写了一个例子来展示我想要达到的目标。由于这个问题,这段代码没有运行,但它希望能突出我的错误。
主程序
from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
class MASTER(ScreenManager):
pass
class WidgetControlOne(ScreenManager):
pass
class WidgetControlTwo(ScreenManager):
pass
class MainScreen(Screen):
pass
class ColourControls(Screen):
def function(self, instance_of_WidgetControlOne):
instance_of_WidgetControlOne.current = '_a_'
class AngleControls(Screen):
pass
class FileOutput(Screen):
pass
class ConfirmLockOveride(Screen):
pass
class QuestionApp(App):
pass
if __name__ == '__main__':
QuestionApp().run()
问题.kv
MASTER:
<MASTER>:
id: screen_manager
MainScreen:
<WidgetControlOne>:
widget_manager_two_instance_a:
ColourControls:
widget_manager_two_instance_b: widget_manager_two_instance_a
AngleControls:
<WidgetControlTwo>:
FileOutput:
ConfirmLockOveride:
<MainScreen>:
BoxLayout:
WidgetControlTwo:
id: widget_control_two
WidgetControlOne:
widget_manager_two_instance_a: widget_control_two
# Part of manager 1
<ColourControls>:
# Needs to be able to change screen in manager 2
widget_manager_two_instance_b:
BoxLayout:
Button:
on_press: root.function(widget_manager_two_instance_b)
<AngleControls>:
BoxLayout:
<FileOutput>:
BoxLayout:
<ConfirmLockOveride>:
name: '_a_'
BoxLayout:
感谢您的任何帮助。
【问题讨论】:
标签: python kivy kivy-language