繁体   English   中英

TypeError: method() 接受 1 个位置参数,但给出了 4 个。 [使用 tkinter]

[英]TypeError: method() takes 1 positional argument but 4 were given. [using tkinter]

我正在尝试使用 tkinter 创建一个 GUI。 我的目标非常简单,每次我更新旋转框的值时,都会出现一个带有文本“值是(值)”的标签。 这是一个小代码示例,我需要为完整代码创建一个类,但每次更新 spinbox 小部件时都会出现错误。

首先我导入库并创建一个类:

import tkinter as tk
from tkinter import ttk

class testclass:

    def __init__(self):
       
        self.Var = tk.StringVar(value=5)
        self.widget = ttk.Spinbox(root,from_=0,to=10,textvariable=self.Var)
        self.widget.pack()
        
        self.Var.trace_add('write', self.trace_test)
        
    def trace_test(self):
        self.text = ttk.Label(root, text = 'the value is '+str(self.Var.get()))
        self.text.pack()

然后我调用我的 GUI:

root = tk.Tk()

test1 = testclass()

root.mainloop()

该程序运行良好,但是当我更改旋转框的值时,会出现下一个错误:

TypeError: testclass.trace_test() takes 1 positional argument but 4 were given

我找不到任何解决这个问题的方法。 我不明白为什么它说给出了 4 个论点。

tkinter 中的trace_add函数尝试将四个参数传递给定义的回调函数(请参阅此答案)。 然而,你的回调函数只接受一个参数,即调用函数的类实例(self)。

如果您不关心传递给回调函数的参数(我怀疑您这样做),您可以简单地接受它们,然后不对它们做任何事情,如下所示:

def trace_test(self, *args):
    self.text = ttk.Label(root, text = 'the value is '+str(self.Var.get()))
    self.text.pack()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM