为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕后森 2023-06-27 18:22:14
我尝试在 self 之后添加实例,但仍然不起作用这是错误消息File "kivy\_event.pyx", line 703, in kivy._event.EventDispatcher.dispatchFile "kivy\_event.pyx", line 1214, in kivy._event.EventObservers.dispatchFile "kivy\_event.pyx", line 1138, in kivy._event.EventObservers._dispatchTypeError: sss() takes 1 positional argument but 2 were given这是完整的 kivy python 代码import kivyfrom kivy.uix.widget import Widgetfrom kivy.properties import ObjectPropertyfrom kivy.app import Appfrom kivy.uix.label import Labelfrom kivy.uix.gridlayout import GridLayoutfrom kivy.uix.textinput import TextInputfrom kivy.uix.button import Buttonfrom kivy.uix.screenmanager import ScreenManager, Screenclass 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()
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

当您单击按钮时,它会使用一些信息执行您的函数。在不同的 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)

这样您就可以通过不同的按钮使用相同的功能

//img1.sycdn.imooc.com//649ab87d0001da6606540503.jpg

import kivy

from kivy.uix.widget import Widget

from kivy.app import App

from kivy.uix.button import Button



class 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()


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信