【发布时间】:2022-01-04 05:20:08
【问题描述】:
当我使用组合框时,脚本打印正常。但是当我使用按钮“获取选项列表”时,我收到错误消息“get_combo_choice() 缺少 2 个必需的位置参数:'event' 和 'cmb'”。我想不通。感谢您的任何提示。
import tkinter as tk
from tkinter import ttk
from tkinter import Tk
from tkinter import Button
root = Tk()
my_heroes = ['Zidane', 'Ronaldo', 'Messi']
position = ['The One!', 'more or less','the bad']
# result =[]
# def get_combo_choice(event, cmb):
# result.append(cmb.get())
# print(result)
result =[None, None, None]
best = []
# Here's the alternative
def get_combo_choice(event, cmb):
i = best.index(event.widget)
result[i] = cmb.get()
print('result-->', result)
print('i-->', i)
print('event.widget-->', event.widget)
print('cmb.get-->', cmb.get())
print('result[i]-->', result[i])
for index, heroe in enumerate(my_heroes):
var = tk.StringVar()
bestPlayers = ttk.Combobox(root,values=position, textvariable=var, state="readonly")
best.append(bestPlayers)
bestPlayers.grid(row=0 + index, column=1,padx=(15,25))
label = tk.Label(root, text = heroe)
label.grid(row=0 + index, column=0,padx=(15,25))
bestPlayers.bind("<<ComboboxSelected>>",lambda event, cmb=var: get_combo_choice(event, cmb))
button = tk.Button(root, text ="get list of choices", command = get_combo_choice)
button.grid(row=4, column=0,padx=(15,25))
root.mainloop()
错误是:
Exception in Tkinter callback
Traceback (most recent call last):
File "c:\python\python38\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
TypeError: get_combo_choice() missing 2 required positional arguments: 'event' and 'cmb'
【问题讨论】:
-
正如错误所说,按钮的
command选项的回调不需要参数。 -
您在每次迭代中创建了一个按钮并将其放在同一单元格(行=4,列=0)中,因此只能看到最后一个按钮。是否应该在 for 循环之外创建按钮?
标签: python python-3.x tkinter combobox