#python #tkinter
#python #tkinter
Вопрос:
Я пытаюсь сделать так, чтобы в этом простом графическом интерфейсе вы могли изменить каталог для исходного файла и файла назначения. Из более раннего сообщения я увидел, что могу использовать tkinter.filedialop.askdirectory, но я не знаю, как я должен реализовать это в коде. Должен ли я сделать отдельную кнопку для исходного и целевого каталогов?
import shutil
import os
import tkinter as tk
source_dir = '/Users/shane/Desktop/test1/'
target_dir = '/Users/shane/Desktop/test2/'
file_names = os.listdir(source_dir)
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.testhi = tk.Button(self)
self.testhi["text"] = "Move!"
self.testhi["command"] = self.movefiles
self.testhi.pack(side="top")
self.quit = tk.Button(self, text="QUIT", fg="red",
command=self.master.destroy)
self.quit.pack(side="bottom")
def movefiles(self):
for file_name in file_names:
shutil.move(os.path.join(source_dir, file_name), target_dir) #for file_name in file_names: #shutil.move(os.path.join(source_dir, file_name), target_dir)
root = tk.Tk()
app = Application(master=root)
app.mainloop()
Комментарии:
1. Да, лучше показывать текущие исходные и целевые каталоги пользователям, используя
Label
кнопки и, чтобы изменить эти каталоги с помощьюfiledialog.askdirectory()
.2. Как бы я это реализовал?
3. Неважно, я это исправил.
4. @CommandBlock Вам все еще нужен ответ на этот вопрос? Если вы решили это самостоятельно, подумайте о том, чтобы опубликовать свой ответ для других в будущем.
Ответ №1:
Самым простым способом решения этой проблемы было просто реализовать filedialog.askdirectory() , где он заменил бы путь, который я указал для исходного и целевого каталогов.
Вот так:
import shutil
import os
import tkinter as tk
source_dir = filedialog.askdirectory()
target_dir = filedialog.askdirectory()
file_names = os.listdir(source_dir)
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.testhi = tk.Button(self)
self.testhi["text"] = "Move!"
self.testhi["command"] = self.movefiles
self.testhi.pack(side="top")
self.quit = tk.Button(self, text="QUIT", fg="red",
command=self.master.destroy)
self.quit.pack(side="bottom")
def movefiles(self):
for file_name in file_names:
shutil.move(os.path.join(source_dir, file_name), target_dir) #for file_name in file_names: #shutil.move(os.path.join(source_dir, file_name), target_dir)
root = tk.Tk()
app = Application(master=root)
app.mainloop()
Комментарии:
1. Вы забыли импортировать
filedialog
модуль. Лучше двигатьсяroot = tk.Tk()
перед двумяaskdirectory()
, иначе у вас будет два экземпляраTk()
, один из которых созданaskdirectory()
неявно иroot
.