GUI для включения / выключения дисплея с использованием Tkinter Python - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь создать функцию, в которой, если я нажму «1», мое изображение изменится, но если я снова нажму 1, изображение вернется в исходное состояние. Этот процесс должен go продолжаться бесконечно.

Я могу сделать это, если пользователь нажимает кнопку. Например, в приведенном ниже коде просто используется конфигурация для изменения функции, которая должна запускаться каждый раз при нажатии кнопки.

# run this "thing" each time seat is activated
def activate(name):
    name.config(image=active)
    name.config(command=lambda: deactivate(name))
    
# run this "thing" each time seat is deactivated
def deactivate(name):
    name.config(image=deactive)
    name.config(command=lambda: activate(name))

x = Button(root, image=deactive, command=lambda: thing(x))

Но я не смогу добиться того же, если вместо этого привяжу ключ:

from tkinter import *

# window config

root = Tk()

root.title("Example - on / off")

root.geometry("1080x600")

# on and off images

inactive = PhotoImage(file='green.png')
active = PhotoImage(file='red.png')

# functions to change the image using config

def something(event):

    my_label.config(image=active)

def something2():

    my_label.config(image=inactive)

#  label which stores the image
my_label = Label(root, image=inactive)
my_label.pack()


# invisible button bind to key "1"
my_button = Button(root)
my_button.bind_all(1, something)
my_button.pack()

root.mainloop()

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

Спасибо

1 Ответ

3 голосов
/ 02 августа 2020

Вы можете упростить лог c, используя функции itertools.cycle() и next():

from tkinter import *
from itertools import cycle

root = Tk()
root.title("Example - on / off")
root.geometry("1080x600")

# on and off images
images = cycle((PhotoImage(file='green.png'), PhotoImage(file='red.png')))

def something(event):
    my_label.config(image=next(images))

my_label = Label(root, image=next(images))
my_label.pack()

root.bind('1', something)
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...