Exception in Tkinter callback Traceback (most recent call last): File "D:\Python\Lib\tkinter\__init__.py", line 1948, in __call__ return self.func(*args) ^^^^^^^^^^^^^^^^ TypeError: on_select() missing 1 required positional argument: 'event' 进程已结束,退出代码0
时间: 2023-08-02 14:09:09 浏览: 210
code09_tkinter_login.pyw_python_tkinter_notepad.pyw_
这个错误的原因是 `on_select()` 函数需要一个事件参数,但是在调用函数时没有传递事件参数。这可能是因为在绑定 `"<<ComboboxSelected>>"` 事件时,没有将事件信息传递给 `on_select()` 函数。
要解决这个问题,需要在绑定事件时使用 `lambda` 表达式将事件信息传递给函数。将 `root.bind("<<ComboboxSelected>>", on_select)` 修改为 `root.bind("<<ComboboxSelected>>", lambda event: on_select(event, values))` 即可解决该问题。同时,需要在 `on_select()` 函数中添加一个参数来接收传递的值。
修改后的程序如下:
```python
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
def on_select(event, values):
selected_items = [value.get() for value in values]
for select in selected_items:
print(select)
# 创建一个 ttk.Combobox 控件
Button4 = tk.Button(root, text="退出", command=root.quit)
Button4.pack(side="left")
# 创建多个 Checkbutton 控件
var_list = []
values = []
for item in ['序号', '姓名', '学号', '爱好']:
var = tk.StringVar()
chk = ttk.Checkbutton(root, text=item, variable=var)
chk.pack()
var_list.append(var)
# 将 Checkbutton 绑定的变量添加到 values 列表中
for var in var_list:
values.append(var)
# 绑定 "<<ComboboxSelected>>" 事件到 on_select 函数
root.bind("<<ComboboxSelected>>", lambda event: on_select(event, values))
root.geometry("300x300")
root.mainloop()
```
阅读全文