我花了一些时间来搜索在 OSX 平台上使用 Python Tkinter 进行拖放行为的可行解决方案,找到的最可能的解决方案是 TkDnD 库。http://sourceforge.net/projects/tkdnd/files/
但是我找不到任何有关安装的手册或指南,并且基本上没有 OSX 上的示例。有人可以与我分享他们的经验吗?
此外,使用 Tkinter 作为 GUI 解决方案不是一个好的选择吗?我的用户都是 OSX 平台,并且所有这些机器上都预装了 Python。有什么好的建议可以找到无需额外安装的本机 GUI 支持吗? PyQT 似乎是另一种选择,但不确定是否需要在客户端计算机上进行额外安装。
我通过下载以下内容在 Windows (10) 和 OSX (10.11) 上运行:
A) Tk 扩展tkdnd2.8 from https://sourceforge.net/projects/tkdnd/
B) Python 包装器TkinterDnD2 from https://sourceforge.net/projects/tkinterdnd/
On OSX:
1)将tkdnd2.8目录复制到/Library/Tcl
2)将TkinterDnD2目录复制到/Library/Frameworks/Python.framework/Versions/.../lib/python/site-packages
(使用sudo由于权限的原因,用于在 OSX 上复制文件的命令。)
在 Windows 上:
1)将tkdnd2.8目录复制到...\Python\tcl
2) 将 TkinterDnD2 目录复制到 ...\Python\Lib\site-packages
这是一个基于的简单测试用例python 将资源管理器文件拖放到 tkinter 条目小部件中。 TkinterDnD2 下载附带了更强大的示例。
import sys
if sys.version_info[0] == 2:
from Tkinter import *
else:
from tkinter import *
from TkinterDnD2 import *
def drop(event):
entry_sv.set(event.data)
root = TkinterDnD.Tk()
entry_sv = StringVar()
entry_sv.set('Drop Here...')
entry = Entry(root, textvar=entry_sv, width=80)
entry.pack(fill=X, padx=10, pady=10)
entry.drop_target_register(DND_FILES)
entry.dnd_bind('<<Drop>>', drop)
root.mainloop()
更新:上述过程适用于 Python 2 或 3。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)