Как одной кнопке задать очередность выполнения функций? Чтобы при каждом нажатии выполнялась новая функция. Python
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
def commend1():
img = Image.open(r'1.jpg')
img.show()
def commend2():
img = Image.open(r'2.jpg')
img.show()
btn = Button(root, command= lambda: [commend1(), commend2()])
btn.pack()
root.mainloop() n
я нашел только как две одновременно
Ответы (2 шт):
Автор решения: day383
→ Ссылка
Можно добавить счётчик нажатия кнопки или через простую глобальную переменную или через переменную tkinter IntVar. Затем увеличивать этот счётчик по нажатию кнопки и в зависимости от его значения выполнять ту или иную функцию.
from tkinter import Tk, Button, IntVar
from PIL import Image
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
count = IntVar()
def on_click():
count.set(count.get() + 1)
return commend1() if count.get() % 2 else commend2()
def commend1():
img = Image.open(r'qr.png')
img.show()
def commend2():
img = Image.open(r'2.jpg')
img.show()
btn = Button(root, command=on_click)
btn.pack()
root.mainloop()
Автор решения: gil9red
→ Ссылка
Если команды нужно выполнять по порядку и бесконечно, то можно их функции поместить в список и через itertools.cycle получить бесконечный генератор
Пример:
import itertools
from tkinter import Tk, Button
def command1():
print('command1')
def command2():
print('command2')
def command3():
print('command3')
cycled_commands = itertools.cycle([command1, command2, command3])
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
def on_click():
command = next(cycled_commands)
return command()
btn = Button(root, text="Run commands", command=on_click)
btn.pack()
root.mainloop()