Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有不带StringVar的动态tkinter标签_Python_User Interface_Tkinter - Fatal编程技术网

Python 具有不带StringVar的动态tkinter标签

Python 具有不带StringVar的动态tkinter标签,python,user-interface,tkinter,Python,User Interface,Tkinter,我是python新手,尝试在GUI上动态添加按钮,并在框架上添加相应的标签,这很有效。但是,当我单击我的按钮打开目录选择器时,我遇到了一个问题,标签不会根据新路径更新,因为textvariable只接受StringVar,而我使用字典跟踪所有动态创建的按钮及其路径(不是StringVar)。除非有办法将普通字符串类型转换为StringVar 我希望我解释得足够好,能够理解 这是我写得很糟糕的代码,因为我只是想看看每件事是如何运作的。基本上,这个程序应该接收一个起始目录,然后其他目录就是起始目录将

我是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的内容更改标签的文本,谢谢!这正是我想要的。