Создание функций для упаковки одного виджета и удаления всех остальных при нажатии разных клавиш - PullRequest
0 голосов
/ 14 июня 2019

Я делаю контроллер для автомобиля с Python, и у меня будет 3 отдельных изображения, чтобы показать, поворачиваются ли колеса влево, вправо или нейтрально.Мне нужно, чтобы одновременно отображалось только одно из этих изображений.

До сих пор я использовал связывание для запуска функций, потому что я не видел другого способа сделать это.Я посмотрел на pack и pack_forget, но не знаю, как заставить их активироваться другими виджетами (поскольку я использую bind).

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 Ответ

1 голос
/ 14 июня 2019

Вместо трех виджетов вы можете заменить изображение того же виджета, когда вам это нужно.

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...