Python 3:Requiered Positional Argument

时间:2018-06-06 17:29:48

标签: python python-3.x tkinter

我正在制作一个节目,但我发现了一个错误。 因此,在我的程序中,您可以创建执行简单功能,更改颜色的按钮。 创建按钮后,它的文本保存在.dat文件中,加载后,它会创建文本中存储文本的按钮。

按钮创建,但当我尝试使其更改颜色时,它会向我发送错误:

TypeError: changecolor() missing 1 required positional argument: 'self'

我看到其他帖子说答案是实例化该功能,例如:

class F:
      define c:
             print("1")
      define a:
             print("3")

f = F
f.c

但如果我尝试这样做,我会收到另一个错误:

__init__() missing 3 required positional arguments: 'MainWindow', 'color', and 'text'

我已经尝试了一切来修复这个错误,所以我想实例化该类并尝试添加所需的位置参数不是一个选项。

那么,我该如何解决这个问题呢? 如果你解决了这个问题,请告诉我怎么做。

这里是用文本加载文件的代码:

class LoadButtons:
    def _init_(self):
        global console
        self.instance=console

    def LoadButton(self):
        global lnumber, path, name, p
        if os.path.isfile("%s\BI\Button%s.dat" %(path, lnumber)):
            print("Button%s found!" %(lnumber))
            name = pickle.load(open("%s\BI\Button%s.dat" %(path, lnumber), 'rb'))
            console = Button(MainWindow, text=name,bg = "#E6E6E6", command=needed_but.changecolor())
            console.pack()
            LoadButtons()._init_()
            lnumber += 1
            LoadButtons().LoadButton()
        else:
            lnumber = 0

以下是使按钮改变颜色的代码:

class needed_but:
    def __init__(self,MainWindow,color,text):
        console = Button(MainWindow, text=text,bg=color, command=self.changecolor)
        console.pack()
        self.instance=console

    def changecolor(self):
        buttonred,buttongreen,buttonblue=get_color()
        global clicked,misses_dict,dictionary
        #clicked=True
        #global buttoncolor
        if buttonred == True:
            if os.path.exists("%s\SI" %(path)):
                self.instance.configure(bg = "#ff0000")
                dun = self.instance.cget('text')
                print(dun)
                if dun in misses_dict:
                    misses_dict[('%s' %(dun))] += 1
                else:
                    misses_dict[('%s' %(dun))] = 1
                dictionary = misses_dict
                pickle.dump(dictionary, open("%s\SI\SIA.dat" %(path), 'wb'))
                print(misses_dict)
                buttonred = False
            else:
                print("ATTENTION: The SI Folder was not found, Please Create a folder with the name SI\nIf you don't create the folder, then you will not be able to use this program")
        elif buttongreen == True:
            self.instance.configure(bg = "#00ff00")
        elif buttonblue == True:
            self.instance.configure(bg = "#2e9afe")

谢谢!

1 个答案:

答案 0 :(得分:0)

您将实例方法称为类方法。必须通过changecolor实例调用needed_butself实例是您打算在其上运行的but = needed_but() but.changecolor() 对象。例如:

class needed_but:
    def __init__(self, MainWindow, color, text):

由于您还没有实例化任何此类对象,因此我不完全确定您对此次通话的期望。

<强>更新

这是您当前的问题:

but = needed_but()

self

根据您的初始化方法,必须提供所有三个列出的值才能创建对象。来自主代码的实例化不提供 - 只有实例化的隐式function openLink(element) { // Do your other animation stuff setTimeout(function() { window.location = element.getAttribute("data-location");}, 1500); // element = your div element and getting the data-location attribute gives the url to open }