作为tkinter.filedialog.askdirectory
的替代品,我偶然发现了tix.DirSelectDialog
。
遗憾的是,我只是不知道如何使用它。我发现有一个__init__(self, master)
方法,但我特别不知道"自我"应该是什么。
我的目标是通过按下主窗口中的按钮来触发一个目录选择对话框,并将选择的目录存储在一个变量中以供以后使用。我建议在python 3.3中使用这个最小化的示例:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from tkinter import *
import tkinter.tix as tix
root = Tk()
def pathSelect():
d = tix.DirSelectDialog.__init__(self=???, master=root)
if d != "":
print(d)
button = Button(root, text="dialog", command=pathSelect)
button.pack()
root.mainloop()
如果这是工作,它是否足以做我想要的?
网上关于这个话题的文章不多。我的两个参考文献是:
http://sourcecodebrowser.com/python3.2/3.2.3 rc2/classtkinter_1_1tix_1_1_dir_select_dialog.html # ae545b097538938871e9576b83fc664be
http://epydoc.sourceforge.net/stdlib/Tix.DirSelectDialog-class.html
他们总是重复语法,但我不能利用这一点。也许其他有更多编程技能的人可以?经过三个小时不成功的研究和实验,我只是很高兴能有一个小例子。
提前感谢!
编辑:
应用furas回答中建议的修复后:
d = tix.DirSelectDialog(master=root)
我意外地得到了这个错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:Program FilesPythonlibtkinter__init__.py", line 1442, in __call__
return self.func(*args)
File "dirdialog.py", line 10, in pathSelect
d = tix.DirSelectDialog(master=root)
File "C:Program FilesPythonlibtkintertix.py", line 762, in __init__
['options'], cnf, kw)
File "C:Program FilesPythonlibtkintertix.py", line 322, in __init__
self.tk.call(widgetName, self._w, *extra)
_tkinter.TclError: invalid command name "tixDirSelectDialog"
它似乎来自fix,但库中不可能有错误,对吗?有人知道答案吗?
<
解决方案/strong>(由于furas) :
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from tkinter import *
import tkinter.tix as tix
root = tix.Tk()
def print_selected(args):
print('selected dir:', args)
def pathSelect():
d = tix.DirSelectDialog(master=root, command=print_selected)
d.popup()
button = Button(root, text="dialog", command=pathSelect)
button.pack()
root.mainloop()
一如既往地创建实例:
d = tix.DirSelectDialog(master=root)
这段代码将执行(内部)tix.DirSelectDialog.__init__(self, master)
与self
的正确参数
你可以处理
d = tix.DirSelectDialog(master=root)
几乎类似于代码
的执行(在python内部)tix.DirSelectDialog(self=d, master=root)
# which executes
tix.DirSelectDialog.__init__(self=d, master=root)
但是通常你不能这样做。
EDIT:要运行它,可能您必须为自己安装Tix (Tcl/Tk扩展)并使用tix.Tk()
代替tkinter.Tk()
Python 2的工作示例:
import Tix as tix
def print_selected(args):
print('selected dir:', args)
root = tix.Tk()
dialog = tix.DirSelectDialog(root, command=print_selected)
dialog.popup()
Python 3的类似示例(但我有一些问题在我的计算机上正常工作)
import tkinter.tix as tix
def print_selected(args):
print('selected dir:', args)
root = tix.Tk()
dialog = tix.DirSelectDialog(root, command=print_selected)
dialog.popup()