Python 具有不带StringVar的动态tkinter标签
我是python新手,尝试在GUI上动态添加按钮,并在框架上添加相应的标签,这很有效。但是,当我单击我的按钮打开目录选择器时,我遇到了一个问题,标签不会根据新路径更新,因为textvariable只接受StringVar,而我使用字典跟踪所有动态创建的按钮及其路径(不是StringVar)。除非有办法将普通字符串类型转换为StringVar 我希望我解释得足够好,能够理解 这是我写得很糟糕的代码,因为我只是想看看每件事是如何运作的。基本上,这个程序应该接收一个起始目录,然后其他目录就是起始目录将被复制到的地方。不过,我没有谈到实际的储蓄部分Python 具有不带StringVar的动态tkinter标签,python,user-interface,tkinter,Python,User Interface,Tkinter,我是python新手,尝试在GUI上动态添加按钮,并在框架上添加相应的标签,这很有效。但是,当我单击我的按钮打开目录选择器时,我遇到了一个问题,标签不会根据新路径更新,因为textvariable只接受StringVar,而我使用字典跟踪所有动态创建的按钮及其路径(不是StringVar)。除非有办法将普通字符串类型转换为StringVar 我希望我解释得足够好,能够理解 这是我写得很糟糕的代码,因为我只是想看看每件事是如何运作的。基本上,这个程序应该接收一个起始目录,然后其他目录就是起始目录将
from tkinter import *
dirID = []
dirMap = {}
dirAmt = 0
def getDirName():
dirName1.set(filedialog.askdirectory())
def getSaveDirName(event):
dirMap[event.widget] = filedialog.askdirectory()
def strToStringVar(name):
temp = StringVar()
temp.set(name)
return temp
def AddDir():
global dirAmt
global dirID
b = Button(mainFrame, text = "Directory" + str(dirAmt))
dirMap[b] = filedialog.askdirectory()
b.bind("<Button-1>", getSaveDirName)
b.place(x=10,y=(100+(60*dirAmt)))
name = StringVar()
name.set(dirMap[b])
l = Label(mainFrame, textvariable = name)
l.place(x=10,y=(130+(60*dirAmt)))
dirID.append(b)
dirAmt = dirAmt + 1
update(self)
def save():
for i in range (0,dirAmt):
print (dirMap[dirID[i]])
root=Tk()
root.title("File Copier")
mainFrame = Frame(root, width = 600, height = 500)
mainFrame.pack()
#Variables
dirName1 = StringVar()
#GUI
GetDirLabel = Label(mainFrame, text="Directory to copy:")
GetDirButton = Button(mainFrame, text = "Select Directory", command = getDirName)#Button for choosing directory
DirGetPathLabel = Label(mainFrame, textvariable=dirName1)#Label for chosen directory
SaveToLabel = Label(mainFrame, text="Directories to copy to:")
AddDirbtnButton = Button(mainFrame, text = "Add more directories", command = AddDir)#Button for Adding directory
SaveButton = Button(mainFrame, text = "Save", command = save)
GetDirLabel.place(x = 0, y = 10)
GetDirButton.place(x = 100, y=8)
DirGetPathLabel.place(x = 5, y = 45)
SaveToLabel.place(x = 0, y = 70)
AddDirbtnButton.place(x = 130, y = 68)
SaveButton.place(x = 300, y = 68)
root.mainloop()
从tkinter导入*
dirID=[]
dirMap={}
迪拉姆=0
def getDirName():
dirName1.set(filedialog.askdirectory())
def getSaveDirName(事件):
dirMap[event.widget]=filedialog.askdirectory()
def STROTOSTRINGVAR(名称):
temp=StringVar()
临时设置(名称)
返回温度
def AddDir():
全球迪拉姆
全局dirID
b=按钮(大型机,text=“目录”+str(dirAmt))
dirMap[b]=filedialog.askdirectory()
b、 绑定(“,getSaveDirName)
b、 位置(x=10,y=(100+(60*dirAmt)))
name=StringVar()
name.set(dirMap[b])
l=标签(大型机,textvariable=名称)
l、 位置(x=10,y=(130+(60*dirAmt)))
dirID.append(b)
迪拉姆=迪拉姆+1
更新(自我)
def save():
对于范围内的i(0,dirAmt):
打印(dirMap[dirID[i]])
root=Tk()
root.title(“文件复制器”)
主机=框架(根,宽度=600,高度=500)
mainFrame.pack()
#变数
dirName1=StringVar()
#桂
GetDirLabel=Label(大型机,text=“要复制的目录:”)
GetDirButton=按钮(大型机,text=“选择目录”,command=getDirName)#用于选择目录的按钮
DirGetPathLabel=Label(大型机,textvariable=dirName1)#所选目录的标签
SaveToLabel=Label(大型机,text=“要复制到的目录:”)
AddDirbtnButton=按钮(大型机,text=“添加更多目录”,command=AddDir)#用于添加目录的按钮
SaveButton=按钮(大型机,text=“Save”,command=Save)
GetDirLabel.place(x=0,y=10)
GetDirButton.place(x=100,y=8)
DirGetPathLabel.place(x=5,y=45)
保存标签位置(x=0,y=70)
AddDirbtnButton.place(x=130,y=68)
保存按钮位置(x=300,y=68)
root.mainloop()
有点不清楚您在问什么,什么标签没有更新?此外,这里没有理由使用StringVar
——它只是另一个需要跟踪的对象。您可以轻松地获取和设置标签小部件上的文本,就像获取和设置StringVar
@BryanOakley的值一样。是的,我不擅长解释。基本上,我使用StringVar是因为我需要一个带有动态变化文本的标签。我目前知道的唯一方法是使用textvariable,它只接受StringVars。但是,由于我正在动态创建按钮+标签本身,因此无法为每个创建的标签设置唯一的StringVar。您可以使用类似l.configure(text=“the new string”)
@BryanOakley的内容更改标签的文本,谢谢!这正是我想要的。有点不清楚你在问什么,什么标签没有更新?此外,这里没有理由使用StringVar
——它只是另一个需要跟踪的对象。您可以轻松地获取和设置标签小部件上的文本,就像获取和设置StringVar
@BryanOakley的值一样。是的,我不擅长解释。基本上,我使用StringVar是因为我需要一个带有动态变化文本的标签。我目前知道的唯一方法是使用textvariable,它只接受StringVars。但是,由于我正在动态创建按钮+标签本身,因此无法为每个创建的标签设置唯一的StringVar。您可以使用类似l.configure(text=“the new string”)
@BryanOakley的内容更改标签的文本,谢谢!这正是我想要的。有点不清楚你在问什么,什么标签没有更新?此外,这里没有理由使用StringVar
——它只是另一个需要跟踪的对象。您可以轻松地获取和设置标签小部件上的文本,就像获取和设置StringVar
@BryanOakley的值一样。是的,我不擅长解释。基本上,我使用StringVar是因为我需要一个带有动态变化文本的标签。我目前知道的唯一方法是使用textvariable,它只接受StringVars。但是,由于我正在动态创建按钮+标签本身,因此无法为每个创建的标签设置唯一的StringVar。您可以使用类似l.configure(text=“the new string”)
@BryanOakley的内容更改标签的文本,谢谢!这正是我想要的。