作为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 Files\Python\lib\tkinter\__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 Files\Python\lib\tkinter\tix.py", line 762, in __init__
['options'], cnf, kw)
File "C:\Program Files\Python\lib\tkinter\tix.py", line 322, in __init__
self.tk.call(widgetName, self._w, *extra)
_tkinter.TclError: invalid command name "tixDirSelectDialog"
它似乎来自tix,但是库中不会有错误,对吧?
有人对此有答案吗?
解决方案(感谢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)
但通常您不能这样做。
编辑:要运行它,您可能必须自己安装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()