【发布时间】:2014-02-14 08:36:36
【问题描述】:
下午好,感谢您的任何见解......再次!
如何在实例中从def changetxt 调用def clearwidgets,如果我使用self.parent.clearwidgets,我收到锚布局不支持这个,这是正确的,因为最终父实例被命名为root或GameApp?
哪个是父级之上的父级。如果这有意义的话。
我想要实现的就像是一个屏幕管理器/控制器,可以从一种布局切换到另一种布局:开始菜单、主游戏区域、结束游戏、积分等。
我在 Github 上查看了演示游戏的 Kivy 源代码,但它们只是直接进入游戏区域,没有启动画面等。
我什至尝试在导入下添加root=anchorlayout 并在changetxt() 中使用全局root,但收到错误全局未找到。
再次感谢和赞赏
import kivy
from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.stacklayout import StackLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.lang import Builder
class launchScreenMenu(FloatLayout):
def __init__(self, **kwargs):
super(launchScreenMenu, self).__init__(**kwargs)
menuanchor = AnchorLayout(anchor_x='left',anchor_y='bottom')
menu = StackLayout(orientation='bt-lr',size_hint=(0.5,1))
about_btn = Button(text='About',size_hint=(0.3,0.1))
help_btn = Button(text='Settings',size_hint=(0.3,0.1))
settings_btn = Button(text='Help',size_hint=(0.3,0.1))
menu.add_widget(about_btn)
menu.add_widget(help_btn)
menu.add_widget(settings_btn)
menuanchor.add_widget(menu)
return self.add_widget(menuanchor)
class launchScreenBtn(AnchorLayout):
def __init__(self, **kwargs):
super(launchScreenBtn, self).__init__(**kwargs)
play_btn = Button(text="Play")
self.anchor_x = 'center'
self.anchor_y = 'center'
self.size_hint = 0.2,0.2
self.add_widget(play_btn)
play_btn.bind(on_press=self.changetxt)
def changetxt(self,play_btn):
play_btn.text = 'Game Over'
clearwidgets()
class GameApp(App):
def build(self):
root = AnchorLayout()
root.add_widget(launchScreenMenu())
root.add_widget(launchScreenBtn())
return root
def clearwidgets(self):
root.clear_widgets()
if __name__=='__main__':
GameApp().run()
【问题讨论】:
标签: python class kivy instances