如何使用tix.DirSelectDialog?

时间:2014-07-22 11:11:04

标签: python dialog tkinter directory tix

作为tkinter.filedialog.askdirectory的替代方案,我偶然发现tix.DirSelectDialog 可悲的是,我只是不知道如何使用它。我发现有一种__init__(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()

如果这样做,那就足以做我想做的事了吗?

网上关于这个话题的内容并不多。我的两个参考文献是:
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()

1 个答案:

答案 0 :(得分:1)

一如既往地创建实例:

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