我有一个在屏幕管理器中包含屏幕管理器的程序,试图创建一个更动态的UI(我认为这会导致性能非常差)。问题是我需要一个在屏幕管理器中的类中的按钮来切换屏幕。
但是,带有按钮的类不能访问屏幕管理器的示例,因为它本身在另一个类中。我曾尝试将示例作为变量传入,但我认为事件的顺序发生得不对,因此没有传递任何内容。
我写了一个例子来展示我想要达到的目标。这段代码因为这个问题而没有运行,但是它希望能突出我的错误。
- 主文件. py**
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:
谢谢你的帮助。
1条答案
按热度按时间ftf50wuq1#
不知道这是不是你想要的,我觉得你想从右屏控制左屏: