2012-11-20 3 views
1

나는 Tkinter로 놀고 있는데, 한 번만 물어 보는 동안 작동한다. 'askopenfilename'과 같습니다. 그러나 많은 팝업을받는 것은 그렇게 편안하지 않습니다. 모든 입력을 한 번에 가져올 프레임을 하나만 만들고 싶습니다.사용자로부터 많은 입력을 받아 파일 이름, 디렉토리, 다른 입력과 같은 문자열로 받아 들인다.

지금까지 FileName이나 Directory를 묻는 단추가있는 프레임 (자습서의 일부) 만 있지만 사용자 선택을 읽을 수는 없습니다.

import Tkinter, Tkconstants, tkFileDialog 
class TkFileDialogExample(Tkinter.Frame): 

    def __init__(self, root): 
    Tkinter.Frame.__init__(self, root) 

    # define buttons 
    Tkinter.Button(self, text='askopenfilename', command=self.askopenfilename).pack() 
    Tkinter.Button(self, text='askdirectory', command=self.askdirectory).pack() 

    def askopenfilename(self): 
    return tkFileDialog.askopenfilename() 

    def askdirectory(self): 
    return tkFileDialog.askdirectory() 

if __name__=='__main__': 
    root = Tkinter.Tk() 
    TkFileDialogExample(root).pack() 
    root.mainloop() 

는 그리고 그냥 내가 확인 생각하는 아 파크 프레임을 기반으로하지만, 비 정지를 반복하고 나는 사용자가 선택이 끝난 것을 얻을 수 없습니다입니다. 버튼의 함수 (반환이기 때문에)와 함께 제공되는 값을 얻을 수 있다고 생각한 적이 있습니까? 나는 아직 시도하지 않은 Returning a value after calling a function with a button in Tkinter ...

을 또는 다른 방법이 그냥 여기 제안처럼

이 필요 나는 함수의 값을 저장하는 DIC 빈리스트, 배열을 생성해야할까요 '버튼에서 읽는거야?'

답변

2

먼저 tkFileDialogmultiple 플래그를 사용하여 하나의 대화 상자에서 여러 파일을 선택할 수 있도록 허용 할 수 있습니다.

두 번째로 tkFileDialog은 파일 이름 (또는 여러 개의 파일 이름이있는 문자열)을 반환하며 원할 경우 물건을 사용할 수 있습니다. 예를 들면 :

def askopenfilename(self): 
    files = tkFileDialog.askopenfilename(multiple=True) 
    # files might be "file1.txt file2.exe file3.bmp" at this point 
    if files: # make sure user didn't cancel the dialog, selecting nothing 
     for f in files.split(' '): 
      print f 

당신이 다른 방법으로 선택한 파일을 사용하는 인스턴스 변수에 파일 이름을 저장하거나 직접 함께 전달하려는 경우

. 반환 값을 사용하는 것은 버튼에 의해 호출되고 반환 값을 어떻게 처리해야할지 모르기 때문에 여기서는별로 사용하지 않습니다.

processFilesself.files을 사용하여 파일로 무엇을 하든지 할 수 있습니다.

def askopenfilename(self): 
    self.files = tkFileDialog.askopenfilename(multiple=True) 
    self.processFiles() 
    # alternatively: 
    files = tkFileDialog.askopenfilename(multiple=True) 
    self.processFiles(files) 

더 많은 예제는 here을 참조하십시오.

+0

글쓰기 "많은 입력"나는 여러 가지가 아니라는 것을 정확히 강조하고 싶었습니다. 다른 위치의 파일, 다른 디렉토리. 'return'에 대한 설명은 변수에 저장하려고 시도하는 것 같습니다. 이미'processFiles'를보고 있습니다. 이전에 그러한 기능을 알지 못했습니다! 비록 내가 그들과 많은 것을하고 싶지는 않지만, 단지 읽을 거리를 얻으실 수 있습니다. – najuste

+1

죄송합니다.'processFiles'는 파일을 가지고 무엇인가를 할 수있는 또 다른 함수의 예제 일뿐입니다. 그것은 내장 된 tkinter가 아닙니다. – Junuxx

+0

나는 클래스를 만드는 데 익숙하지 않다. 그래서 내 var에도 불구하고. 정의와 시도 루프가 계속 실행됩니다 ... – najuste

관련 문제