亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類型錯誤:函數需要 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)

這樣您就可以通過不同的按鈕使用相同的功能

http://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 關注
  • 272 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號