Как использовать tix.DirSelectDialog?

В качестве альтернативы 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
http://epydoc.sourceforge.net/stdlib/Tix.DirSelectDialog-class.html
Они всегда повторяют синтаксис, но я не могу этим воспользоваться. Может быть, кто-то еще с большими навыками программирования может? После трех часов безуспешных исследований и экспериментов я был бы очень доволен небольшим примером.

Большое спасибо заранее!


РЕДАКТИРОВАТЬ:

После применения исправления, предложенного в ответе фура:

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"

Кажется, это происходит изнутри, но в библиотеке не может быть ошибки, верно? У кого-нибудь есть ответ на этот вопрос?


РЕШЕНИЕ (спасибо фурам):

#!/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 ответ

Решение

Создайте экземпляр как всегда:

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()
Другие вопросы по тегам