Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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 使用tkinter定义浏览和列出多个目录的函数或类_Python_Tkinter - Fatal编程技术网

Python 使用tkinter定义浏览和列出多个目录的函数或类

Python 使用tkinter定义浏览和列出多个目录的函数或类,python,tkinter,Python,Tkinter,我想创建一个具有正确格式的函数或类,以创建文本标签、输入字段和按钮。该按钮将允许我浏览我的目录,并用所选目录填充输入字段。我的代码允许我完成大部分工作,但是目录总是填充在最后一个输入字段中,而不是按钮所指的字段中 我是tkinter和GUI的新手,因此很抱歉,如果这是一个简单的解决方案,我假设问题是root.name.set引用了上次调用的函数 from tkinter import * from tkinter import filedialog def askdirectory():

我想创建一个具有正确格式的函数或类,以创建文本标签、输入字段和按钮。该按钮将允许我浏览我的目录,并用所选目录填充输入字段。我的代码允许我完成大部分工作,但是目录总是填充在最后一个输入字段中,而不是按钮所指的字段中

我是tkinter和GUI的新手,因此很抱歉,如果这是一个简单的解决方案,我假设问题是root.name.set引用了上次调用的函数

from tkinter import *
from tkinter import filedialog

def askdirectory():
  dirname = filedialog.askdirectory()
  root.name.set(dirname)


def dirField(root, label, rowNum):
    text = StringVar()
    text.set(label)
    dirText = Label(root, textvariable = text, height =4)
    dirText.grid(row = rowNum, column = 1)

    dirBut = Button(root, text = 'Browse', command = askdirectory)
    dirBut.grid(row = rowNum, column = 3)

    root.name = StringVar()
    adDir = Entry(root,textvariable = root.name, width = 100)
    adDir.grid(row = rowNum, column = 2)


if __name__ == '__main__':
    root = Tk()
    root.geometry('1000x750')

    adText = "Select directory of Ads"
    userText = "Select directory of User credentials"

    adField = dirField(root, adText, 1)
    userField = dirField(root, userText, 2)

    root.mainloop()

您应该意识到,您需要让每个条目都有自己的textvariable。否则,它们将重叠。看一看我的代码,它会让你走的

from tkinter import *
from tkinter import filedialog

path = [None, None] # Fill it with the required number of filedialogs

def askdirectory(i):
    dirname = filedialog.askdirectory()
    path[i].set(dirname)


def dirField(root, label, rowNum, i):
    dirText = Label(root, text=label)
    dirText.grid(row=rowNum, column=0)

    dirBut = Button(root, text='Browse', command=lambda: askdirectory(i))
    dirBut.grid(row=rowNum, column=2)

    path[i] = StringVar()
    adDir = Entry(root, textvariable=path[i], width=50)
    adDir.grid(row=rowNum, column=1)


if __name__ == '__main__':
    root = Tk()

    adText = "Select directory of Ads"
    userText = "Select directory of User credentials"

    adField = dirField(root, adText, 0, 0)
    userField = dirField(root, userText, 1, 1)

    root.mainloop()

谢谢你的帮助,这解决了我的问题。你是对的,我不知道如何正确地将askdirectory函数与dirfield链接起来,而不让它变得太混乱——你的解决方案工作得非常好。