【问题标题】:How do I dynamically set the name of a tkinter label如何动态设置 tkinter 标签的名称
【发布时间】:2021-02-24 03:33:16
【问题描述】:

我的项目中有这段代码:

def savespack():
    savelabelcount = 0
    for i in range(saveamount):
        savelabelcount = savelabelcount + 1
        savebuttontext = "Save " + str(savelabelcount)
        Button(scrollable_frame, text=savebuttontext, width="53", height="5").pack()

用户可以在程序中创建多个保存,当重新打开项目时,正确数量的保存文件将显示为 Tkinter 按钮。我通过从外部文件中读取数字来创建按钮。我需要使按钮具有不同的变量名称以调用正确的保存文件并在按下按钮时加载正确的属性(例如“保存 2”需要加载 save2.txt 的属性)

简单地说,我需要为循环的每次迭代给Button(scrollable_frame, text=savebuttontext, width="53", height="5").pack() 一个新的变量名,我不知道该怎么做。我读了一些关于字典和列表的东西,但它很混乱,我不知道它是否可以应用于这种情况。

变量名称应该类似于:savebutton1, savebutton2, savebutton3 等。

如果我能做到这一点,我将不胜感激,谢谢!

【问题讨论】:

  • 将它们保存在字典中。您不需要为每个按钮设置单独的变量。

标签: python-3.x tkinter


【解决方案1】:

下面的示例显示了如何将每个按钮小部件保存在列表中,而不是作为单独的变量。

它还会在按下按钮时调用saveFile 函数,该函数当前只是将保存文件编号打印到屏幕上,但此函数可以替换为实际保存每个文件的代码。使用这种方法,甚至可能不需要将按钮保留在列表中。

我通常会使用类而不是全局变量来执行此操作,但这将适用于您的目的

import tkinter as tk

saveamount = 5

save_buttons = []

def saveFile(fileNumber):
    print("Saving File ", fileNumber)

def savespack():
    global save_buttons
    savelabelcount = 0
    for i in range(saveamount):
        savelabelcount = savelabelcount + 1
        savebuttontext = "Save " + str(savelabelcount)
        currentButton = tk.Button(scrollable_frame, text=savebuttontext, width="53", height="5")
        currentButton['command'] = lambda x=savelabelcount: saveFile(x)
        currentButton.pack()
        save_buttons.append(currentButton)
        


root = tk.Tk()
scrollable_frame = tk.Frame(root)
scrollable_frame.pack()
savespack()
root.mainloop()

您可以使用字典而不是列表,但考虑到您的用例,我不确定是否有任何好处。只需使用save_buttons[2] 即可访问第三个按钮。

【讨论】:

  • 这段代码有效,我很好,你能解释一下fileNumber的来源以及它是如何有效的吗?
  • 是的。 fileName 在以currentButton['command'] 开头的行传递给 saveFile 函数。 lambda 关键字告诉 python 创建一个匿名函数,它将 savelabelcount 发送到 saveFile 函数(通过 x 变量,这似乎是匿名函数的约定)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 2014-09-07
  • 2020-02-20
  • 1970-01-01
相关资源
最近更新 更多