Python 如何使用tix.DirSelectDialog?

Python 如何使用tix.DirSelectDialog?,python,dialog,tkinter,directory,tix,Python,Dialog,Tkinter,Directory,Tix,作为tkinter.filedialog.askdirectory的替代方法,我偶然发现了tix.DirSelectDialog 遗憾的是,我不知道如何使用它。我发现有一个\uuuu init\uuuu(self,master)方法,但我特别不知道“self”应该是什么 我的目标是通过按下主窗口中的按钮触发一个目录选择对话框,并将所选目录存储在一个变量中供以后使用。我建议对python 3.3使用以下最小化示例: #!/usr/bin/env python3 # -*- coding: utf-

作为
tkinter.filedialog.askdirectory
的替代方法,我偶然发现了
tix.DirSelectDialog

遗憾的是,我不知道如何使用它。我发现有一个
\uuuu init\uuuu(self,master)
方法,但我特别不知道“self”应该是什么

我的目标是通过按下主窗口中的按钮触发一个目录选择对话框,并将所选目录存储在一个变量中供以后使用。我建议对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()
如果这是工作,它是否足够做我想做的事

网上关于这个话题的报道不多。我的两份推荐信是:


他们总是重复语法,但我无法使用。也许其他有更多编程技能的人可以?经过三个小时不成功的研究和实验,我很乐意举一个小例子

非常感谢


编辑:

#!/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()
应用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.\uuuu init\uuuuu(self,master)
,并使用正确的参数
self


你可以请客

d = tix.DirSelectDialog(master=root)
几乎类似于代码的执行(内部由python执行)

但通常你不能这么做


编辑:要运行它,您可能必须自己安装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()
Python3的类似示例(但我在计算机上正常工作时遇到了一些问题)


非常感谢。这是我的一个愚蠢的错误。。。我肯定会从中吸取教训。我更正了这一行,并希望弹出一个不错的对话框,但我得到了一个错误,我将在一分钟内添加到我的问题。你有什么想法吗?
tkinter
tcl/tk
语言(与python一起安装)上唯一的包装器。而
tkinter.tix
tix
扩展上的包装,用于
tcl/tk
,但可能您必须自己安装它。我找到了解决方案-可能您必须使用
tix.tk()
来代替
tkinter.tk()
-请参阅internet上的示例(用于Python 2):而且您完全正确。只需将
Tk()
替换为
tix.Tk()
就可以将8位数字打印成一个点,如.43934720,所以我意识到这一定是一个句柄左右。
d.popup()
终于给了我想要的对话框。顺便说一下,您的Python3示例会在几秒钟内弹出两个窗口。添加
time.sleep(2000)
使程序崩溃,但让我看看,第一个窗口是主窗口,第二个窗口仍然是空的,没有响应对话框。所以,我想,就是这样!谢谢你的帮助!我将把我们两个例子的融合作为最终结果添加到我最初的帖子中。
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()