Реализация конечного автомата на основе событий в python tkinter - PullRequest
0 голосов
/ 20 апреля 2020

Скажем, у меня есть производная кнопка и класс State_Machine. Этот конечный автомат имеет переменную под названием состояние. Событие нажатия кнопки должно изменить начальное состояние с 0 на 1, затем на 2, затем на 3, а затем на 1 и так далее. Как мне go о реализации этого?

import tkinter as tk

class myButtonClass(tk.Button):
...
...
self["command"]=self.Click

def Click()
   MySM = StateMachine()
   MySM.update_state()

class StateMachine:
...
...
def update_state():
...
...
print(self.state)

Пожалуйста, прокомментируйте, если вышеприведенное представляется правильным выбором кодирования? или есть какой-то другой лучший способ сделать это без изменения классов и их переменных. Я хочу сохранить эти классы.

1 Ответ

0 голосов
/ 20 апреля 2020

При написании кода шаблона новый StateMachine будет создаваться при каждом нажатии кнопки. Вам необходимо иметь постоянный объект StateMachine между вызовами Click()

Простой, но уродливый способ добиться этого - использовать глобальную переменную:

# one time init outside of the event callback
MySM = StateMachine()

def Click()
   global MySM # retrieve the global state machine object
   MySM.update_state() # change its state
...