Kivy add_widget 不显示新的小部件
Kivy add_widget does not show new widgets
我试图在屏幕内的滚动视图中添加小部件,但我不明白代码有什么问题。该代码没有给我任何错误,但它没有显示新的小部件。当按下“添加”按钮时,函数 add() 被调用但它不起作用。
这里有 code.py
class ScreenManagement(ScreenManager):
pass
class Screen1(Screen):
pass
class Screen2(Screen):
pass
class ClassAllScreen(BoxLayout):
pass
class ClassApp(App):
def add(self):
self.s2 = Screen2()
layout = GridLayout(cols=3)
layout.add_widget(Label(text='Test'))
layout.add_widget(TextInput())
layout.add_widget(CheckBox())
self.s2.ids.widget_list.add_widget(layout)
def build(self):
self.root = ClassAllScreen()
return self.root
kv = Builder.load_file("main2.kv")
if __name__ == '__main__':
ClassApp().run()
和 kv 文件:
<Screen1>:
GridLayout:
cols:1
<Screen2>:
GridLayout:
cols:1
Button:
size_hint_y: 0.1
text: 'add'
on_release:
app.add()
ScrollView:
size_hint: 1, 1
do_scroll_x: False
padding: 20
spacing: 20
GridLayout:
id: widget_list
cols: 1
spacing: 5
GridLayout:
rows: 1
<ScreenManagement>:
Screen1:
name: 'screen1'
Screen2:
name: 'screen2'
<ClassAllScreen>:
orientation:'vertical'
GridLayout:
cols: 1
GridLayout:
rows: 1
size_hint_y: 0.12
Button:
text: "Screen 2"
on_release:
app.root.ids.screenmanager.transition.direction = 'right'
app.root.ids.screenmanager.current='screen2'
Button:
text: "Screen 1"
on_release:
app.root.ids.screenmanager.transition.direction = 'left'
app.root.ids.screenmanager.current='screen1'
ScreenManagement:
id:screenmanager
有人可以帮助我吗?
在您的 add()
方法中,代码:
self.s2 = Screen2()
正在创建 Screen2
的新实例。然后您将小部件添加到该新实例。但是,该新实例不是您的 GUI 的一部分。您想要的是将小部件添加到 GUI 中的 Screen2
实例。为此,将上面的代码替换为:
self.s2 = self.root.ids.screenmanager.get_screen('screen2')
此代码使用其 id
获取 ScreenManager
,然后将 get_screen()
用于 Screen2
实例。
我试图在屏幕内的滚动视图中添加小部件,但我不明白代码有什么问题。该代码没有给我任何错误,但它没有显示新的小部件。当按下“添加”按钮时,函数 add() 被调用但它不起作用。
这里有 code.py
class ScreenManagement(ScreenManager):
pass
class Screen1(Screen):
pass
class Screen2(Screen):
pass
class ClassAllScreen(BoxLayout):
pass
class ClassApp(App):
def add(self):
self.s2 = Screen2()
layout = GridLayout(cols=3)
layout.add_widget(Label(text='Test'))
layout.add_widget(TextInput())
layout.add_widget(CheckBox())
self.s2.ids.widget_list.add_widget(layout)
def build(self):
self.root = ClassAllScreen()
return self.root
kv = Builder.load_file("main2.kv")
if __name__ == '__main__':
ClassApp().run()
和 kv 文件:
<Screen1>:
GridLayout:
cols:1
<Screen2>:
GridLayout:
cols:1
Button:
size_hint_y: 0.1
text: 'add'
on_release:
app.add()
ScrollView:
size_hint: 1, 1
do_scroll_x: False
padding: 20
spacing: 20
GridLayout:
id: widget_list
cols: 1
spacing: 5
GridLayout:
rows: 1
<ScreenManagement>:
Screen1:
name: 'screen1'
Screen2:
name: 'screen2'
<ClassAllScreen>:
orientation:'vertical'
GridLayout:
cols: 1
GridLayout:
rows: 1
size_hint_y: 0.12
Button:
text: "Screen 2"
on_release:
app.root.ids.screenmanager.transition.direction = 'right'
app.root.ids.screenmanager.current='screen2'
Button:
text: "Screen 1"
on_release:
app.root.ids.screenmanager.transition.direction = 'left'
app.root.ids.screenmanager.current='screen1'
ScreenManagement:
id:screenmanager
有人可以帮助我吗?
在您的 add()
方法中,代码:
self.s2 = Screen2()
正在创建 Screen2
的新实例。然后您将小部件添加到该新实例。但是,该新实例不是您的 GUI 的一部分。您想要的是将小部件添加到 GUI 中的 Screen2
实例。为此,将上面的代码替换为:
self.s2 = self.root.ids.screenmanager.get_screen('screen2')
此代码使用其 id
获取 ScreenManager
,然后将 get_screen()
用于 Screen2
实例。