【问题标题】:Python Tk creating buttons named after dictionaries in a for loopPython Tk 在 for 循环中创建以字典命名的按钮
【发布时间】:2023-02-21 19:11:03
【问题描述】:

代码:

Mods = {"links_too":[module_1,module_2,module_3,module_4,module_5,module_6],"Buttons":[],"previous":Mods}
module_1 = {"links_too":[],"Buttons":[],"previous":Mods}

def create_menu_buttons():
    global Mods
    for x in Mods["links_too"]:
        x = ttk.Button(window,text=x,command=nav_load_menu(x))

代码的目标是为 "links_too" 部分中的每个字典创建一个按钮。为此,所有按钮都需要名称,所以我用字典的名称命名。我知道这会导致问题,因为它与字典本身具有相同的名称,但我不知道另一种方法可以做到这一点。 有没有办法在 for 循环中执行此操作,其中按钮将具有不同的名称。

【问题讨论】:

标签: python tkinter ttk


【解决方案1】:

实际上,我知道有两种方法可以使这成为可能。

第一个很简单但是不建议.它使用globals(),您可以在其中从字典中创建变量。

这是一个例子:

# I've edited the dict a bit to make it runable
Mods = {"links_too":["module_1"],"Buttons":[],"previous":"Mods"}

window = ttk.Tk()

for x in Mods["links_too"]:
    globals()[x + "_button"] = ttk.Button(window,text=x).place(x=0, y=0) #,command=lambda x=x:nav_load_menu(x))

window.mainloop()
print(globals())

这将创建一个存储实际按钮的全局变量module_1_button

第二种是像这样使用字典键的值作为变量。它将以更好的方式做同样的事情。

# A recommended way
window = ttk.Tk()

buttons = {
    "button1": {
        "id": "module_1_button"
    }
}

for button in buttons:
    buttons[button]["id"] == ttk.Button(window,text=buttons[button]["id"]).place(x=0, y=0)


window.mainloop()

笔记:我问了一个很相似的问题,你可以找到它here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 2021-12-03
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    相关资源
    最近更新 更多