【问题标题】:Tkinter button argumentsTkinter 按钮参数
【发布时间】:2019-01-18 03:04:28
【问题描述】:

我最近开始学习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()   

【问题讨论】:

标签: python tkinter


【解决方案1】:

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

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

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 2011-01-18
    • 2013-11-10
    • 1970-01-01
    相关资源
    最近更新 更多