在python-tkinter中实现基于事件的状态机



假设我有一个派生按钮和一个类State_Machine。这个状态机有一个称为state的变量。按钮点击事件应该会将初始状态从0驱动到1,然后是2,然后是3,然后是1,依此类推。我该如何实现这一点?

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)

请评论以上是否是正确的编码选择?或者还有其他更好的方法可以在不更改类及其变量的情况下做到这一点。我想维持这些课程。

按照编写模板代码的方式,每次单击按钮都会创建一个新的StateMachine。在对Click()的调用之间,您需要有一个透明的StateMachine对象

实现这一点的一个简单但丑陋的方法是使用全局变量:

# 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

最新更新