【发布时间】:2021-06-28 13:58:42
【问题描述】:
我的标题可能看起来有点模棱两可,所以这里是一个解释。
Pycharm 或 Visual Studio Code 等专业 IDE 允许复制文件夹、导航到特定目录并将其粘贴到那里。我也想实现它。
但就我而言,shutil.copytree needs 2 arguments - source folder and destination folder.
那么有什么方法可以复制文件夹,浏览资源管理器,单击粘贴或按ctrl+v,文件夹将被复制或粘贴到那里,不像shutil.copytree,用户已经需要提供路径?
目前,我有一个代码可以将文件夹名称复制到剪贴板。
import os
import tkinter as tk
import tkinter.ttk as ttk
import clipboard
class App(tk.Frame):
def __init__(self, master, path):
tk.Frame.__init__(self, master)
self.tree = ttk.Treeview(self)
ysb = ttk.Scrollbar(self, orient='vertical', command=self.tree.yview)
xsb = ttk.Scrollbar(self, orient='horizontal', command=self.tree.xview)
self.tree.configure(yscroll=ysb.set, xscroll=xsb.set)
self.tree.heading('#0', text=path, anchor='w')
abspath = os.path.abspath(path)
root_node = self.tree.insert('', 'end', text=abspath, open=True)
self.process_directory(root_node, abspath)
self.tree.bind("<Control-c>",self.copy_to_clipboard)
self.tree.grid(row=0, column=0)
ysb.grid(row=0, column=1, sticky='ns')
xsb.grid(row=1, column=0, sticky='ew')
self.grid()
def copy_to_clipboard(self,event,*args):
item = self.tree.identify_row(event.y)
clipboard.copy(self.tree.item(item,"text"))
def process_directory(self, parent, path):
try:
for p in os.listdir(path):
abspath = os.path.join(path, p)
isdir = os.path.isdir(abspath)
oid = self.tree.insert(parent, 'end', text=p, open=False)
if isdir:
self.process_directory(oid, abspath)
except PermissionError:
pass
root = tk.Tk()
path_to_my_project = 'C:\\Users\\91996\\Documents'
app = App(root, path=path_to_my_project)
app.mainloop()
【问题讨论】:
-
你想只复制文件夹的内容还是包含的文件夹?
-
如果我在一个文件上按
ctrl+c,然后复制该文件,如果我在一个文件夹上按ctrl+c,然后复制整个文件夹及其内容。 @艺术 -
@Sujay 而不是使用
clipboard,您可以使用 tkinter 的内置方法,例如.clipboard_get()、.clipboard_append(...)和.clipboard_clear()