Как использовать 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()