簡體   English   中英

類型錯誤:函數需要 1 個位置參數,但 2 個被賦予了 kivy python

[英]TypeError: Function takes 1 positional argument but 2 were given kivy python

我試圖在自我之后添加實例,但仍然無法正常工作

這是錯誤信息

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

當您單擊按鈕時,它會使用一些信息執行您的功能。 在不同的 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 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM