【发布时间】:2022-01-08 11:39:56
【问题描述】:
我已经被这个问题困扰了一段时间,所以我在这里。我正在尝试通过屏幕管理器在 python 类中调用一个函数,但我不知道这是否是最好的方法。
这是我的代码,用于一个最低限度的可生产示例:
from kivymd.uix.screen import MDScreen
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
Builder.load_file('TestKV.kv')
class Welcome(Screen):
def __init__(self, **kwargs):
super(Welcome, self).__init__(**kwargs)
pass
def MoveOn(self):
self.manager.screens[1].TestCallback()
class TestTabs(TabbedPanel):
def __init__(self, **kwargs):
super(TestTabs, self).__init__(**kwargs)
pass
def TestCallback():
print("Success")
class TestScreen(Screen):
def __init__(self, **kwargs):
super(TestScreen, self).__init__(**kwargs)
self.add_widget(TestTabs())
pass
class ExampleApp(MDApp):
def build(self):
self.sm = ScreenManager(transition=NoTransition())
self.sm.add_widget(Welcome(name="Welcome"))
self.sm.add_widget(TestScreen(name="Stack"))
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "DeepOrange"
return self.sm
ExampleApp().run()
还有我的 Kivy 文件:
<Welcome>
Screen:
MDCard:
size_hint: None, None
size: 300, 400
pos_hint:{"center_x": 0.5, "center_y": 0.5}
elevation: 10
padding:25
spacing: 25
orientation: "vertical"
MDRoundFlatButton:
text:"Go To Next Screen"
on_press: root.MoveOn()
<Test1@TabbedPanelItem>
BoxLayout:
ScrollView:
do_scroll_x: False # Important for MD compliance
do_scroll_y:True
size_hint_x: 0.35
MDList:
id:tasks
size_hint: None, None
size: 300, 400
pos_hint:{"center_x": 0.5, "center_y": 0.5}
padding:25
spacing: 25
ScrollView:
do_scroll_x:False
do_scroll_y:True
pos_hint:{"center_x": 0.5, "center_y": 0.5}
size_hint_x: 0.5
width : 400
padding:25
spacing:25
BoxLayout:
size_hint_y : None
height: self.minimum_height
elevation: 10
padding: (0, 50, 0,0)
spacing: 50
orientation:'vertical'
Label:
text:'Basic Information'
font_size:18
MDTextField:
id:basic
size_hint_x: None
width: 200
height: 100
font_size: 18
pos_hint: {"center_x": 0.5}
multiline:False
max_text_length: 15
<TestTabs>:
id:testTabs
pos_hint: {'center_x': .5, 'center_y': .5}
do_default_tab: False
Test1:
id:test1
我正在尝试在一个屏幕上按下按钮,在另一个屏幕的子项(选项卡式面板的子项)上调用该函数。
请帮忙,因为我不知道出了什么问题。
【问题讨论】: