>

프로그램에서 드롭 다운 메뉴에서 선택한 변수를 기반으로 텍스트를 변경하려고하는데 명령을 활성화하는 버튼이 작동하지 않는 것 같습니다. 내가 볼 수 있듯이 선택 기능은 프로그램이로드되면 버튼을 클릭 할 때와 상관없이 다시 실행되지 않습니다.

from Tkinter import *
class App:
    def __init__(self, root):
        self.title = Label(root, text="Choose a food: ",
                           justify = LEFT, padx = 20).pack()
        self.label = Label(root, text = "Please select a food.")
        self.label.pack()
        self.var = StringVar()
        self.var.set("Apple")
        food = ["Apple", "Banana", "Pear"]
        option = apply(OptionMenu, (root, self.var) + tuple(food))
        option.pack()
        button = Button(root, text = "Choose", command=self.select())
        button.pack()
    def select(self):
        selection = "You selected the food: " + self.var.get()
        print(self.var.get()) #debug message
        self.label.config(text = selection)
if __name__ == '__main__':
    root = Tk()
    app = App(root)
    root.mainloop()

Tkinter의 초보자이며 전체 앱을 만들기 전에 기본 사항을 파악하려고합니다. 미리 감사드립니다 :)

  • 답변 # 1

    와이즈 비즈 변경해보기   button = Button(root, text = "Choose", command=self.select()) 로 . self.select 다음에 제거 된 괄호에 유의하십시오. 이 방법으로 버튼을 누를 때까지 메소드가 참조되고 실제로 실행되지 않습니다.

  • 답변 # 2

    주된 문제는 button = Button(root, text = "Choose", command=self.select) 를 설정할 때 괄호가 필요하지 않다는 것입니다 :

    command=self.food()
    
    

    부수적으로, button = Button(root, text="Choose", command=self.select) 를 생성하는 방식  약간 이례적입니다. 다음 코드를 대신 사용할 수 있습니다. 이는 나머지 코드와 더 일치합니다.

    OptionMenu
    
    

  • 답변 # 3

    (버튼을 눌렀을 때 호출되는 함수 또는 메소드. 콜백은 함수, 바인딩 된 메소드 또는 다른 호출 가능한 파이썬 객체가 될 수 있습니다.이 옵션을 사용하지 않으면 사용자가 버튼을 누를 때 아무 일도 일어나지 않습니다 .)

    ***************************** 수정 된 코드 **************** ***************

    option = OptionMenu(root, self.var, *food)
    
    

    from Tkinter import * class App: def __init__(self, root): self.title = Label(root, text="Choose a food: ", justify = LEFT, padx = 20).pack() self.label = Label(root, text = "Please select a food.") self.label.pack() self.var = StringVar() self.var.set("Apple") food = ["Apple", "Banana", "Pear"] option = apply(OptionMenu, (root, self.var) + tuple(food)) option.pack() button = Button(root, text = "Choose", command=self.select) #use function name instead of aclling the function button.pack() def select(self): selection = "You selected the food: " + self.var.get() print(selection) #debug message self.label.config(text = selection) if __name__ == '__main__': root = Tk() app = App(root) root.mainloop()

관련 자료

  • 이전 java - 그루비 - 날짜 구문 분석
  • 다음 AES 암호화에 PHP와 해독에 펄