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

问题描述 投票:0回答:1

说我有一个派生的按钮和一个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)

请大家评论一下,如果上面的编码选择似乎是正确的吗? 或者有其他更好的方法,在不改变类及其变量存在的情况下,可以做到这一点。我想维护这些类。

python class button tkinter state-machine
1个回答
0
投票

你写模板代码的方式是一个新的 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
© www.soinside.com 2019 - 2024. All rights reserved.