Ell*_*hen 2 python macos tkinter python-2.7 python-3.x
我花了一些时间来寻找可行的解决方案来在OSX平台上使用Python Tkinter进行Drap和Drop行为,找到的最可能的解决方案是TkDnD库. http://sourceforge.net/projects/tkdnd/files/
但是我找不到任何关于安装的手册或指南,基本上没有OSX上的样品......任何人都可以与我分享他们的经验吗?
此外,使用Tkinter作为GUI解决方案不是一个好的选择吗?我的用户都是OSX平台,所有这些机器上都预安装了Python.有什么好的建议,无需额外安装即可找到本机GUI支持?PyQT似乎是另一种选择,但不确定它是否需要在客户端计算机上进行额外安装.
谢谢.埃利斯
我通过以下方式在Windows(10)和OSX(10.11)上工作:
A)来自https://sourceforge.net/projects/tkdnd/的 Tk扩展tkdnd2.8
)来自https:// sourceforge的 Python包装器TkinterDnD2 . net/projects/tkinterdnd /
On OSX:
1)将tkdnd2.8目录复制到/ Library/Tcl
2)将TkinterDnD2目录复制到/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site- packages
(由于权限,使用sudo命令复制OSX上的文件.)
在Windows上:
1)将tkdnd2.8目录复制到C:\ Python27\tcl
2)将TkinterDnD2目录复制到C:\ Python27\Lib\site-包
这是一个基于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()
Run Code Online (Sandbox Code Playgroud)
更新:上述过程适用于Windows上的Python 3.6.3,因此我更新了示例代码以在Py3上运行.
这是 2017 年的更新,有更多细节,因为 Mac 决定无法将文件写入 /System/Library。以下解决方案也是跨平台的,因为我目前正在为使用 TkDnD 的 Windows/Mac 编写应用程序。
以下解决方案适用于 pyInstaller,也适用于 Mac OS 10.12 和 Windows 7。
首先,我们需要找到一条通往 tkDnD 所在位置的路径。默认情况下,我将 tkdnd2.8 文件夹放在 main.py 旁边。
import sys, os
if getattr(sys, 'frozen', False):
# If the application is run as a bundle, the pyInstaller bootloader
# extends the sys module by a flag frozen=True and sets the app
# path into variable _MEIPASS'.
application_path = sys._MEIPASS
else:
application_path = os.path.dirname(os.path.abspath(__file__))
TK_DND_PATH = os.path.join(application_path,'tkdnd2.8')
Run Code Online (Sandbox Code Playgroud)
请注意,Ellis 的解决方案直接适用于 Tcl,修改路径。确保在某个地方,你有一些符合这个要点的东西:
import tkinter as tk
root = tk.Tk()
root.eval('lappend auto_path {' + TK_DND_PATH + '}')
Run Code Online (Sandbox Code Playgroud)
在此之后,每当您碰巧实际导入 tkDnD 时,它都会找到它。我使用了 DnD.py。如果没有 'lappend auto_path' 命令,我的程序将永远找不到 tkDnD。
https://mail.python.org/pipermail/tkinter-discuss/2005-July/000476.html
我花了几天时间才弄清楚如何安装 TkDnD lib,虽然这听起来像是一个简单的问题,但确实让我困惑了一段时间。
在 OSX 上安装 TkDnD 的两种方法:
A. 复制到/System/Library/Tcl/8.x
:
OSX 已经预装了 Python,这是 Tcl 库的安装路径。使用 Tk/Tcl lib 时,TkDnd lib 将自动加载。
B. 设置os.environ['TKDND_LIBRARY']
为 TkDnd2.x.dylib 的位置: 示例代码:
if sys.platform == 'win32':
if getattr(sys, 'frozen', False):
os.environ['TKDND_LIBRARY'] = os.path.join(os.path.dirname(sys.executable), 'tkdnd2.7')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5024 次 |
最近记录: |