문제

Python과 함께 Tkinter를 사용하여 Excel 파일을 CSV로 변환하는 프로그램의 사용자 인터페이스를 만듭니다.

상태 표시 줄 역할을하는 레이블을 만들고 statusBartExt를 textVariable로 stringVar ()로 설정했습니다. inputfileentry 및 outputfileentry는 입력 및 출력 파일 경로를 포함하는 텍스트 변환입니다.

def convertButtonClick():
    statusBarText.set('Converting...')

    if inputFileEntry.get() == '' or outputFileEntry.get() == '':
        statusBarText.set('Invalid Parameters.')
        return

    retcode = subprocess.('Program.exe' ,shell=true)

    if retcode == 0:
        statusBarText.set('Conversion Successful!')
    else:
        statusBarText.set('Conversion Failed!')

이 기능은 변환 버튼을 클릭하면 호출되며 상태 표시 줄이 '변환 ...'라고 말하지 않는 한 모든 것이 잘 작동합니다.

입력 또는 출력이 비어 있으면 상태 표시 줄 텍스트가 유효하지 않은 매개 변수로 변경되며 리턴 코드에 따라 성공 또는 실패로 변경됩니다. 문제는 '변환 ...'로 변하지 않는다는 것입니다.

나는 그 정확한 선을 IF 문에 복사하고 붙여 넣었고 그것은 잘 작동하지만, 어떤 이유로 든 함수의 맨 위에있을 때 하위 프로세스가 실행되기 전에는 결코 변하지 않습니다. 모든 도움은 대단히 감사하겠습니다.

도움이 되었습니까?

해결책

단일 메소드 호출 로이 모든 것을 수행하기 때문에 GUI는 하위 프로세스를 시작하기 전에 업데이트 할 기회를 얻지 못합니다. update_idletasks () 호출을 확인하십시오 ...

~에서 http://infohost.nmt.edu/tcc/help/pubs/tkinter/universal.html

w.update_idletasks()크기를 조정하고 다시 그리기 위젯과 같은 디스플레이 업데이트의 일부 작업은 응용 프로그램이 이벤트 처리를 마치고 새로운 이벤트를 기다리기 위해 기본 루프로 돌아갈 때까지 일반적으로 연기되기 때문에 유휴 작업이라고합니다.
다음 바디가 응용 프로그램 전에 디스플레이를 업데이트하도록하려면 위젯에서 W.Update_idletasks () 메소드를 호출하십시오.

다른 팁

레이블을 어떻게 만들고 있습니까? 이 작은 테스트 설정이 있습니다.

from Tkinter import *
class LabelTest:

    def __init__(self, master):
        self.test = StringVar()

        self.button = Button(master, text="Change Label", command=self.change)
        self.button.grid(row=0, column=0, sticky=W)

        self.test.set("spam")
        self.testlabel = Label(master, textvariable = self.test).grid(row = 0,column = 1)
    def change(self):

        self.test.set("eggs")



root = Tk()
root.title("Label tester")
calc = LabelTest(root)

root.mainloop()

그리고 그것은 작동합니다. "text = statusBartext.get ()"대신 "textVariable = statusBartext"를 사용해야 했습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top