2014-07-22 1 views
1

tkinter.filedialog.askdirectory의 대안으로 나는 tix.DirSelectDialog을 우연히 만났습니다.
슬프게도 나는 그것을 사용하는 방법을 모르겠다. 나는 __init__(self, master) 방법이 있다는 것을 알았지 만, 나는 특히 "자기"가 무엇인지 알지 못합니다.tix.DirSelectDialog를 사용하는 방법?

내 목표는 기본 창에서 버튼을 눌러 디렉토리 선택 대화 상자를 시작하고 나중에 사용할 수 있도록 변수를 선택한 디렉토리에 저장하는 것입니다. 파이썬 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
그들은 항상 구문을 반복하고 있지만 그 사용을 할 수 아니에요. 더 많은 프로그래밍 기술을 가진 사람이있을 수 있습니까? 3 시간 동안 실패한 연구와 실험을 마치고 나면 작은 예제에 매우 만족할 것입니다.

대단히 감사드립니다.


는 편집 :

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" 

이 올 것 같다 : 나는 놀랍게도이 오류가 발생했습니다

d = tix.DirSelectDialog(master=root) 

:

수정 프로그램을 적용한 후는 furas의 대답에 제안 tix 내에서,하지만 라이브러리에 오류가있을 수 없습니다 r ight? 답변을 얻은 사람이 있습니까?


솔루션 (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

만들기 예 : self에 대한 올바른 인수

d = tix.DirSelectDialog(master=root) 

이 코드가 실행 (내부적으로) tix.DirSelectDialog.__init__(self, master)


당신은 취급 할 수

d = tix.DirSelectDialog(master=root) 

거의 코드

tix.DirSelectDialog(self=d, master=root) 

# which executes 

tix.DirSelectDialog.__init__(self=d, master=root) 

의 (내부적으로 파이썬으로) 실행하지만, 일반적으로이 작업을 수행 할 수있다.


편집 :은 자신을 위해 TIX (은 Tcl/Tk의 확장)를 설치하고 파이썬 2 tkinter.Tk()

근무 예를 대신 tix.Tk()를 사용할 필요가 아마를 실행합니다 :

import Tix as tix 

def print_selected(args): 
    print('selected dir:', args) 

root = tix.Tk() 
dialog = tix.DirSelectDialog(root, command=print_selected) 
dialog.popup() 

파이썬 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() 
+0

감사합니다. 이것은 나 같은 어리석은 실수였다 ... 나는 분명히 그것을 배울 것이다. 이 줄을 수정하고 멋진 대화 상자가 나타나기를 기대했지만 대신 분당 의문에 추가 할 오류가 있습니다. 아이디어가 있으십니까? – S818

+0

'tkinter'는'tcl/tk' 언어 (파이썬과 함께 설치됨)에서만 래퍼입니다. 그리고'tkinter.tix'는'tcl/tk'에 대한'tix' 확장자를 래퍼합니다.하지만 아마도 여러분이 직접 설치해야합니다. – furas

+0

해결책을 찾았습니다 - 아마도 tkinter.Tk() 대신에'tix.Tk()'를 사용해야합니다 - 인터넷에서 파이썬 2의 예제를 보십시요 : [Using Tix with Python] (http : // tix .sourceforge.net/docs/html/TixUser/subsection3_2_2.html) – furas

관련 문제