我正在尝试创建一个Tkinter-GUI来选择要分析的数据点。此GUI将成为更大的Python例程的一部分,该例程会减少数据。
数据点按顺序编号(#1,#2,#3,...),每个数据点都有一个复选按钮。单击一个按钮后,应将相应的数据点编号添加到列表中,例如[1、3、7]。我编写的代码如下,
"""
GRAPHICAL SELECTION OF DATA POINTS FOR ANALYSIS
"""
# create an empty list of data points
selection = []
# import libraries and modules
from tkinter import *
# create parent window
parent = Tk()
parent.title('SELECT DATA POINTS FOR ANALYSIS')
# create callback functions
def callback1(event):
selection.append(1)
def callback2(event):
selection.append(2)
def callback3(event):
selection.append(3)
def callback4(event):
selection.append(4)
def callback5(event):
selection.append(5)
# create list call
Label(parent,
text="Check data points to be analyzed:",
font=('arial', 12, 'bold')).grid(row=1,column=0,columnspan=11,sticky='w')
# create checkbuttons
button1 = Checkbutton(parent,text='#1',command=callback1) # create widget
button1.grid(row =2,column=0,columnspan=4,sticky='w') # position widget
button1.bind("<Button-1>",callback) # bind widget to left mouse click
button2 = Checkbutton(parent,text='#2',command=callback2)
button2.grid(row =3,column=0,columnspan=4,sticky='w')
button2.bind("<Button-1>",callback)
button3 = Checkbutton(parent,text='#3',command=callback3)
button3.grid(row =4,column=0,columnspan=4,sticky='w')
button3.bind("<Button-1>",callback)
button4 = Checkbutton(parent,text='#4',command=callback4)
button4.grid(row =5,column=0,columnspan=4,sticky='w')
button4.bind("<Button-1>",callback)
button5 = Checkbutton(parent,text='#5',command=callback5)
button5.grid(row =6,column=0,columnspan=4,sticky='w')
button5.bind("<Button-1>",callback)
parent.mainloop()
print("selection =",selection)
我已经创建了复选按钮并将它们绑定到相应的回调函数。显然,该事件(单击鼠标左键)也已正确指定,即“”。
运行此代码时,将正确创建并显示GUI。但是,单击任何按钮时,我都会收到以下错误消息:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\ridim\Anaconda3\lib\tkinter\__init__.py", line 1558, in __call__
return self.func(*args)
TypeError: callback1() missing 1 required positional argument: 'event'
我是Tkinter的新手,所以我不知道自己在做什么错。语法回调显然是正确的,并且在函数定义中出现了“事件”一词。
如果有人能告诉我我的代码有什么问题,我将不胜感激。另外,我想问一下是否有一种更有效的方法来设置回调函数。也许是带有“ if”语句的单个回调函数。
非常感谢,
Carvalho
答案 0 :(得分:0)
问题在于,单击按钮会导致调用callback1()
,而不是callback1(something)
。尝试删除event
参数。