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()