我对Python很新 . 我正在尝试将文件名(包含完整路径)输入到TKinter条目小部件 . 由于文件名的路径可能很长,我希望能够直接从Windows资源管理器拖放文件 . 在Perl中我看到了以下内容:
use Tk::DropSite;
.
.
my $mw = new MainWindow;
$top = $mw->Toplevel;
$label_entry = $top->Entry(-width => '45',. -background => 'ivory2')->pack();
$label_entry->DropSite(-dropcommand => \&drop,-droptypes => 'Win32',);
我在Python中使用TKinter可以做些什么吗?
2 回答
Tk没有任何处理它的命令,并且Python不包含任何额外的Tk扩展来执行拖放进程间应用程序,因此您需要扩展来执行操作 . Tkdnd(http://sourceforge.net/projects/tkdnd的Tk扩展,而不是Tkdnd.py模块)适合我 . 要从Python中使用它,需要一个包装器 . 快速搜索一个,似乎http://mail.python.org/pipermail/tkinter-discuss/2005-July/000476.html包含这样的代码 . 我做了另一个,因为我不喜欢那个 . 我的包装器的问题在于它是高度未经测试的,事实上我只使用函数
bindtarget
并且只用了10秒左右 .使用下面的包装器,您可以创建一些小部件并宣布它支持接收拖动的文件 . 这是一个例子:
以下是
untested_tkdnd_wrapper.py
的代码:与Tkdnd一起,你会发现一个
tkdnd.tcl
程序,它比它提供的自己的C扩展更高级别 . 我没有包装这个更高级别的代码,但是在Python中复制它比使用这个更低级别的包装器更有趣 .自从这个问题最初发布以来,事情已经取得了进展,并且在SourceForge.net上可以使用tkdnd2.8(Tcl extensions)和TkinterDnD2(tkdnd2.8的Python包装器) .
这里是最简单的示例代码,可以完全按照您的要求进行操作 .
您可以在Python 2.7和3.6上查看How to Install and Use TkDnD with Python 2.7 Tkinter on OSX以获取Windows和Mac的下载和安装信息 .