错误:
TypeError:changetxt()不带参数,但是没有参数,或者没有定义全局名称play_btn。
我尝试在def args中添加实例,自我,但仍然有相同的错误。
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.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():
play_btn.text = 'Game Over'
class GameApp(App):
def build(self):
root = AnchorLayout()
root.add_widget(launchScreenMenu())
root.add_widget(launchScreenBtn())
return root
if __name__=='__main__':
GameApp().run()
答案 0 :(得分:3)
所有实例方法都应始终以self
作为第一个参数:
def changetxt(self, *args):
self.play_btn = 'Game Over'
*args
只是为了安全起见,如果不是你通过了论证。
另外,将课程中的所有 play_btn
更改为self.play_btn
:
self.play_btn = Button(text="Play")
嗯,希望这有帮助!
答案 1 :(得分:1)
实例方法的第一个参数(想想类中的任何函数,但也有例外)是实例本身的链接。按照惯例,这被称为self
。 Reference
我完全不知道你的第二个论点是什么。它可能是play_btn
,因为这就是调用函数的内容。这很方便,因为无论如何你都试图引用它,否则它将是未定义的。
您希望def读取的方式如下:
def changetxt(self, play_btn):