类型错误:函数需要 1 个位置参数,但 kivy python 给出了 2 个位置参数

我尝试在 self 之后添加实例,但仍然不起作用


这是错误消息


File "kivy\_event.pyx", line 703, in kivy._event.EventDispatcher.dispatch


File "kivy\_event.pyx", line 1214, in kivy._event.EventObservers.dispatch


File "kivy\_event.pyx", line 1138, in kivy._event.EventObservers._dispatch


TypeError: sss() takes 1 positional argument but 2 were given

这是完整的 kivy python 代码


import kivy


from kivy.uix.widget import Widget


from kivy.properties import ObjectProperty


from kivy.app import App


from kivy.uix.label import Label


from kivy.uix.gridlayout import GridLayout


from kivy.uix.textinput import TextInput


from kivy.uix.button import Button


from kivy.uix.screenmanager import ScreenManager, Screen




class Touch(Widget):


    def __init__(self, **kwargs):


        super(Touch, self).__init__(**kwargs)


        self.cols = 1


        self.Rc1 = Button(text="Submit", font_size=40)


        self.Rc1.bind(on_press=self.sss)


        self.add_widget(self.Rc1)



    def sss(self):


        self.Rc1 = Button(text="Push Me !",


                          font_size="20sp",


                          background_color=[1, 0, 0, 1],


                          color=(1, 1, 1, 1),


                          size=(32, 32),


                          size_hint=(.2, .2),


                          pos=(300, 250))


class MyApp(App):


    def build(self):


        return Touch()



if __name__ == "__main__":


    MyApp().run()


慕后森
浏览 237回答 1
1回答

米脂

当您单击按钮时,它会使用一些信息执行您的函数。在不同的 GUI 中它可以使用不同的信息。在某些 GUI 中,它可以是有关事件的信息,在其他 GUI 中,它可以是有关小部件的信息,等等。Kivy发送有关单击的小部件的信息,您必须接收它def sss(self, widget):如果您想更改现有Button按钮,则不要创建新按钮 - 如果您将其分配给同一变量,则不会更改现有按钮。您必须删除旧按钮并使用添加新按钮add_widget()您已有按钮,self.Rc1因此您可以执行以下操作def sss(self, widget):    self.Rc1.text = "Push Me !"    self.Rc1.font_size = "20sp"    self.Rc1.background_color = [1, 0, 0, 1]    self.Rc1.color = (1, 1, 1, 1)    self.Rc1.size = (32, 32)    self.Rc1.size_hint = (.2, .2)    self.Rc1.pos = (300, 250)但更有趣的是,你也可以得到这个小部件sss(self, widget):,你可以做def change_button(self, widget):    widget.text = "Push Me !"    widget.font_size = "20sp"    widget.background_color = [1, 0, 0, 1]    widget.color = (1, 1, 1, 1)    widget.size = (32, 32)    widget.size_hint = (.2, .2)    widget.pos = (300, 250)这样您就可以通过不同的按钮使用相同的功能import kivyfrom kivy.uix.widget import Widgetfrom kivy.app import Appfrom kivy.uix.button import Buttonclass Touch(Widget):    def __init__(self, **kwargs):        super(Touch, self).__init__(**kwargs)                #self.all_buttons = []                for row in range(10):            for col in range(10):                x = col * 100                y = row * 100                button = Button(text=f"{row},{col}", pos = (x, y))                button.bind(on_press=self.change_button)                                self.add_widget(button)                                #self.all_buttons.append(button)    def change_button(self, widget):        if widget.background_color == [1,1,1,1]:            widget.background_color = [1, 0, 0, 1]        else:            widget.background_color = [1, 1, 1, 1]class MyApp(App):    def build(self):        return Touch()if __name__ == "__main__":    MyApp().run()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python