Tkinter 按钮参数



我最近开始学习python。我对 gui 没有什么经验,想多学习一些。通过很少的研究,我找到了tkinter让它成为现实。作为一个项目,决定让游戏策划。

我正在做的是用可用颜色的 OptionMenu 放置一些行。在右侧,我放了一个确认按钮,该按钮设置了命令"验证"。问题是我想使用以下代码将不同的值传递给每个按钮(框架和行(,我遇到的问题是它说该行始终为 9。

我想到了一个可能的解决方案,那就是在最后重置 y=0,每次我按下按钮时添加 1。但我认为它应该更简单。

from tkinter import *
def selectedColor(var):
print("Value is: " + var)
def validate(frame, row):
# pass
print("Frame: " + str(frame) + " row: " + str(row))
rowToValidate = frame.nametowidget("." + str(row))
for x in range(0,4):
columnValue = frame.nametowidget("." + str(x) + str(row))
print(columnValue)
master = Tk()
OPTIONS
= [
"RED",
"BLUE",
"YELLOW",
"VIOLET",
"ORANGE",
"GREEN",
"BROWN",
"WHITE",
"BLACK"
]
colorQuantity = 4
tries = 10
for y in range(0, tries):
frame = Frame(master, name=str(y))
isEnabled = "disabled" if y != 0 else "normal"
for x in range(0,colorQuantity):
variable = StringVar(frame, name=str(x)+str(y))
variable.set("Choose color") # default value
# print(str(variable))
w = OptionMenu(frame, variable, *OPTIONS, command=selectedColor)        
w.configure(state=isEnabled)
w.pack(side=LEFT)
confirmButton = Button(frame, text="Confirm", command= lambda: validate(frame, y+1))
confirmButton.configure()
confirmButton.pack(side=TOP)
print(str(frame))
frame.pack(side=TOP)

master.mainloop()   

我会将 OptionMenu 变量保存在列表中,以便更轻松地检索它们的值。通过在命令选项中使用partial(链接(,可以确保每一行都获得正确的行号作为输入。

请参阅下面的代码(我还在下拉列表中添加了一些格式(:


from tkinter import *
from functools import partial
def selectedColor(var):
print("Value is: " + var)
def validate(args):
frame = args[0]
row = args[1]
for x in range(0,4):
print(rows[row][x].get())
master = Tk()
OPTIONS = [
"RED",
"BLUE",
"YELLOW",
"VIOLET",
"ORANGE",
"GREEN",
"BROWN",
"WHITE",
"BLACK"
]
colorQuantity = 4
tries = 10
rows =[]
for y in range(0, tries):
frame = Frame(master, name=str(y))
isEnabled = "disabled" if y != 0 else "normal"
row = []
for x in range(0,colorQuantity):
variable = StringVar(frame, name=str(x)+str(y))
variable.set("Choose color") # default value
# print(str(variable))
row.append(variable)
w = OptionMenu(frame, variable, *OPTIONS, command=selectedColor)  
w.configure(width=len("Choose color"))      
w.configure(state=isEnabled)
w.pack(side=LEFT)
rows.append(row)
confirmButton = Button(frame, text="Confirm", command=partial(validate,(frame, y)))
confirmButton.configure()
confirmButton.pack(side=TOP)
print(str(frame))
frame.pack(side=TOP)

master.mainloop()

最新更新