Как одной кнопке задать очередность выполнения функций? Чтобы при каждом нажатии выполнялась новая функция. 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()
→ Ссылка