我的应用程序是从.kv文件构建的。
我想从我的python文件向Screen
添加按钮。
class Profiles(Screen):
def suh(self):
for i in range(5):
self.add_widget(Button(text=i))
suh
函数似乎无效。这是因为在构建应用后会调用该函数吗?有一个更好的方法吗?
答案 0 :(得分:1)
由于屏幕是 RelativeLayout ,因此请使用on_pre_enter
或on_enter
来调用方法 suh(),然后添加size
和pos
到“按钮”小部件。
使用容器,例如在屏幕顶部的 BoxLayout 或 Gridayout 。
每当通过on_pre_enter
或on_enter
将窗口小部件添加到屏幕时,请使用on_pre_leave
或on_leave
删除窗口小部件。这是为了防止每次进入屏幕时将小部件加倍。
如果清除窗口小部件的速度过快,请在一定时间间隔内使用 Clock.schedule_once 。
Kivy屏幕发生以下事件。
on_pre_enter:()
将要使用屏幕时触发的事件:进入 动画开始了。
on_enter:()
显示屏幕时触发事件:输入的动画为 完成。
on_pre_leave:()
要删除屏幕时触发的事件:离开 动画开始了。
on_leave:()
移除屏幕时触发事件:离开动画为 完成。
请注意,默认情况下,Screen不显示任何内容: RelativeLayout。您需要将该类用作根窗口小部件 您自己的屏幕,最好的方法是继承类。
警告
由于Screen是RelativeLayout,因此了解这一点很重要 Common Pitfalls。
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button
from kivy.lang import Builder
Builder.load_string("""
<Profiles>:
# on_pre_enter: self.suh()
on_enter: self.suh()
""")
class Profiles(Screen):
def suh(self):
for i in range(5):
self.add_widget(Button(text=str(i), size_hint=(0.1, 0.1), pos=(i*100, i*100)))
sm = ScreenManager()
sm.add_widget(Profiles(name='profiles'))
class TestApp(App):
def build(self):
return sm
if __name__ == "__main__":
TestApp().run()
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button
from kivy.lang import Builder
Builder.load_string("""
<Profiles>:
# on_pre_enter: self.suh()
on_enter: self.suh()
BoxLayout:
id: container
""")
class Profiles(Screen):
def suh(self):
for i in range(5):
self.ids.container.add_widget(Button(text=str(i), size_hint=(0.1, 0.1)))
sm = ScreenManager()
sm.add_widget(Profiles(name='profiles'))
class TestApp(App):
def build(self):
return sm
if __name__ == "__main__":
TestApp().run()
答案 1 :(得分:0)
通过App
类而不是Screen
添加小部件。因此,您将必须创建一个创建小部件的函数,并且在构建函数中,必须使用Clock.schedule_once
模块中的Clock
来运行其他函数。示例:
class TestApp(App):
def build(self):
Clock.schedule_once(self.yoyo, 0)
return MainWin()
def yoyo(self, *args):
for i in memu_acc:
self.root.ids["prof"].ids["pro"].add_widget(Button(text=i))