gpt4 book ai didi

python - 如何选择目录并将其存储到 tkinter 中的变量中?

转载 作者:行者123 更新时间:2023-12-05 08:20:27 28 4
gpt4 key购买 nike

我有 tkinter GUI。我喜欢有一个文本框和一个按钮。单击该按钮时,应打开一个文件资源管理器,最后可以选择一个目录。此路径必须显示在文本框中。

代码:

from tkinter import *
from tkinter import ttk
from tkinter import filedialog
gui = Tk()
gui.geometry("400x400")
gui.title("FC")
a = Label(gui ,text="Enter name").grid(row=0,column = 0)
E = Entry(gui).grid(row=0,column=1)
folder_selected = filedialog.askdirectory()
c = ttk.Button(gui ,text="find").grid(row=4,column=0)
gui.mainloop()

最佳答案

这样的事情怎么样

from tkinter import *
from tkinter import ttk
from tkinter import filedialog
gui = Tk()
gui.geometry("400x400")
gui.title("FC")

def getFolderPath():
folder_selected = filedialog.askdirectory()
folderPath.set(folder_selected)

def doStuff():
folder = folderPath.get()
print("Doing stuff with folder", folder)

folderPath = StringVar()
a = Label(gui ,text="Enter name")
a.grid(row=0,column = 0)
E = Entry(gui,textvariable=folderPath)
E.grid(row=0,column=1)
btnFind = ttk.Button(gui, text="Browse Folder",command=getFolderPath)
btnFind.grid(row=0,column=2)

c = ttk.Button(gui ,text="find", command=doStuff)
c.grid(row=4,column=0)
gui.mainloop()

总结:

  • 您正在创建小部件并在同一行使用布局 grid。这是一个坏主意。我已将其拆分,以便您定义按钮,然后在新行上进行布局
  • 我添加了一个 Stringvar,这是一个特殊的 tkinter 变量,可用于自动更新字段
  • 我添加了两个函数,一个在您按下新的浏览按钮时调用,将调出文件夹选择对话框。我为“查找”按钮添加了另一个按钮,您可以使用它来对文件夹路径执行任何操作。

考虑:更具描述性的命名。请注意,我将新按钮命名为 btnFind,而不是像您为其他小部件所做的那样将其命名为单个字符。这将使您在回头查看代码时更容易调试/理解代码。

编辑:由于您需要这些文件夹选择项中的多个,因此值得创建一个包含用于选择文件夹的所有属性和函数的类。这是一个例子

from tkinter import *
from tkinter import ttk
from tkinter import filedialog
gui = Tk()
gui.geometry("400x400")
gui.title("FC")

class FolderSelect(Frame):
def __init__(self,parent=None,folderDescription="",**kw):
Frame.__init__(self,master=parent,**kw)
self.folderPath = StringVar()
self.lblName = Label(self, text=folderDescription)
self.lblName.grid(row=0,column=0)
self.entPath = Entry(self, textvariable=self.folderPath)
self.entPath.grid(row=0,column=1)
self.btnFind = ttk.Button(self, text="Browse Folder",command=self.setFolderPath)
self.btnFind.grid(row=0,column=2)
def setFolderPath(self):
folder_selected = filedialog.askdirectory()
self.folderPath.set(folder_selected)
@property
def folder_path(self):
return self.folderPath.get()

def doStuff():
folder1 = directory1Select.folder_path
folder2 = directory2Select.folder_path
folder3 = directory3Select.folder_path
print("Doing stuff with folder", folder1, folder2, folder3)

folderPath = StringVar()

directory1Select = FolderSelect(gui,"Select Folder 1")
directory1Select.grid(row=0)

directory2Select = FolderSelect(gui,"Select Folder 2")
directory2Select.grid(row=1)

directory3Select = FolderSelect(gui,"Select Folder 3")
directory3Select.grid(row=2)


c = ttk.Button(gui, text="find", command=doStuff)
c.grid(row=4,column=0)
gui.mainloop()

您现在可以根据需要选择任意数量的不同文件夹。

关于python - 如何选择目录并将其存储到 tkinter 中的变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51877124/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com