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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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 每次点击按钮时,都会产生一个固定的按钮。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

以上是关于在python中实现基于事件的状态机 tkinter的主要内容,如果未能解决你的问题,请参考以下文章

如何在Swift中实现状态机?

浅谈在Unity3D中实现Finite State Machine System有限状态机框架系统

在 Python 中实现事件处理程序 [重复]

有限自动机是如何在代码中实现的?

在 PHP 中实现 CQRS

当以太网适配器状态改变 Python 时触发事件