Python 不带参数,2给定:Kivy按钮绑定到def
错误: TypeError:changetxt()不接受参数,但接受给定的2,或者未定义全局名称play\u btn 我尝试将instance、self以及添加到def参数中,但仍然有相同的错误Python 不带参数,2给定:Kivy按钮绑定到def,python,kivy,Python,Kivy,错误: TypeError:changetxt()不接受参数,但接受给定的2,或者未定义全局名称play\u btn 我尝试将instance、self以及添加到def参数中,但仍然有相同的错误 import kivy from kivy.app import App from kivy.uix.anchorlayout import AnchorLayout from kivy.uix.stacklayout import StackLayout from kivy.uix.floatlay
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()
实例方法的第一个参数(考虑类中的任何函数,但也有例外)是指向实例本身的链接。按照惯例,这称为
self
我不能百分之百肯定你的第二个论点是什么。它可能是play\u btn
,因为这就是调用函数的原因。这会很方便,因为您正试图引用它,否则它将是未定义的
您希望def的读取方式如下所示:
def changetxt(self, play_btn):
实例方法的第一个参数(考虑类中的任何函数,但也有例外)是指向实例本身的链接。按照惯例,这称为
self
我不能百分之百肯定你的第二个论点是什么。它可能是play\u btn
,因为这就是调用函数的原因。这会很方便,因为您正试图引用它,否则它将是未定义的
您希望def的读取方式如下所示:
def changetxt(self, play_btn):
所有实例方法应始终将
self
作为其第一个参数:
def changetxt(self, *args):
self.play_btn = 'Game Over'
*args
只是为了安全起见,以防不是你传递了参数
另外,将类内的所有play\u btn
更改为self.play\u btn
:
self.play_btn = Button(text="Play")
好吧,希望这有帮助 所有实例方法应始终将
self
作为其第一个参数:
def changetxt(self, *args):
self.play_btn = 'Game Over'
*args
只是为了安全起见,以防不是你传递了参数
另外,将类内的所有play\u btn
更改为self.play\u btn
:
self.play_btn = Button(text="Play")
好吧,希望这有帮助 可能需要添加def changetext(self,*args),然后查看第二个参数实际上是什么is@theodox啊,是的。基维可能会这么做。ThanksThanks,有助于理解,将其更改为self、args和self.play_按钮会导致launchscreenbtn没有对象属性play_按钮,我尝试了mhlester代码调整,这似乎有效,感谢帮助:)可能需要添加def changetext(self、*args),然后查看第二个参数实际是什么is@theodox啊,是的。基维可能会这么做。感谢感谢感谢,有助于理解,将其更改为self、args和self.play_按钮结果launchscreenbtn没有对象属性play_按钮,我尝试了mhlester代码调整,这似乎有效,感谢帮助:)干杯:)有效,感谢参考,出于某些原因类和oop真的让我困惑,过程函数和一般函数我觉得我还可以,谢谢你的参考,因为某些原因类和oop真的把我搞糊涂了,过程函数和一般函数我觉得我还可以