Python 不带参数,2给定:Kivy按钮绑定到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

错误:

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.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真的把我搞糊涂了,过程函数和一般函数我觉得我还可以