>

Python으로 자동차 용 컨트롤러를 만들고 있는데 바퀴가 왼쪽, 오른쪽 또는 중립인지를 나타내는 3 개의 별도 이미지가 있습니다. 한 번에이 이미지 중 하나만 표시하면됩니다.

지금까지 다른 방법을 보지 못했기 때문에 bind를 사용하여 함수를 트리거했습니다. pack 및 pack_forget을 살펴 봤지만other위젯 (바인드를 사용하고 있기 때문에)에 의해 활성화되도록하는 방법을 모르겠습니다.

import tkinter as tk
win = tk.Tk()
def forwards(event):
    print("going forwards...")
def left(event):
    print("turning left...")
def right(event):
    print("turning right...")
def backwards(event):
    print("going backwards...")
neutralImage = tk.PhotoImage(file="neutral.gif")
leftImage = tk.PhotoImage(file="turnedLeft.gif")
rightImage = tk.PhotoImage(file="turnedRight.gif")
neutralPosition = tk.Label(win, image=neutralImage)
leftPosition = tk.Label(win, image=leftImage)
rightPosition = tk.Label(win, image=rightImage)
win.bind("w", forwards)
win.bind("a", left)
win.bind("d", right)
win.bind("s", backwards)

문제를 다음과 같이 식별했습니다. 버튼을 누르는 것이 아니라면 위젯을 숨기거나 표시 할 수 없습니다.

  • 답변 # 1

    3 개의 위젯이있는 대신 필요한 경우 동일한 위젯의 이미지를 바꾸는 것입니다.

    import tkinter as tk
    def changeImage(imageLabelWidget, newImage):
        imageLabelWidget.configure(image=newImage)
        imageLabelWidget.image = newImage
    win = tk.Tk()
    neutralImage = tk.PhotoImage(file="neutral.gif")
    leftImage = tk.PhotoImage(file="turnedLeft.gif")
    rightImage = tk.PhotoImage(file="turnedRight.gif")
    
    neutralPosition = tk.Label(win, image=neutralImage)
    neutralPosition.image = neutralImage
    neutralPosition.pack()
    
    win.bind("w", lambda event, imageLabelWidget=neutralPosition, newImage=neutralImage: 
                                changeImage(imageLabelWidget, newImage))
    win.bind("a", lambda event, imageLabelWidget=neutralPosition, newImage=leftImage: 
                                changeImage(imageLabelWidget, newImage))
    win.bind("d", lambda event, imageLabelWidget=neutralPosition, newImage=rightImage: 
                                changeImage(imageLabelWidget, newImage))
    win.mainloop()
    
    

  • 이전 html - 제출 버튼에 jquery 이벤트가 첨부되면 양식이 게시되지 않음
  • 다음 objective c - 새로운 서비스 항목으로 OSX 오른쪽 클릭 컨텍스트 메뉴 업데이트