2

有没有办法通过 event_generate() 方法传递自定义参数(例如字符串)?

问题是我有两个线程。其中一个应该传递另一个事件处理程序所需的变量。我尝试使用附加参数声明 eventHandler,例如 def refreshCanvas(self, event, param),但后来我无法通过 event_generate() 传递参数。

我也尝试将它作为现有参数“状态”传递,它应该是一个字符串,但它也不起作用。

生成事件的类:

class GameThread(Thread):
    def __init__(self, gameInstance, gui):
        Thread.__init__(self)

        self.__gameInstance = gameInstance
        gui.event_generate("<<refresh>>", when="tail", state=str(self.__gameInstance.getState()))

假设捕获此事件的类:

class App(ttk.Frame):
    def __init__(self, parent=None):
        ttk.Frame.__init__(self, parent)
        parent.bind("<<refresh>>", self.refreshCanvas)

    def refreshCanvas(self, event):
        #something
        pass
4

1 回答 1

1

我建议使用数据选项,如http://www.tcl.tk/man/tcl/TkCmd/event.htm#M16所说

-data string 字符串可以是任何值;它指定事件的 user_data 字段。仅对虚拟事件有效。对应于绑定脚本中虚拟事件的 %d 替换。

但是我发现它还没有在 Python 中(参见:http ://bugs.python.org/issue3405 )现在我建议使用队列之类的东西并将数据传递给队列,然后生成事件并拉取处理程序方法中队列中的数据

编辑:

附带说明一下,一般来说,我会小心使用 Tkinter 的任何线程。我建议考虑使用 mtTkinter 以确保安全。mtTkinter 是 Tkinter 的包装器,使其线程安全。

于 2014-01-20T12:36:34.727 回答