通过event_generate传递其他参数?

时间:2013-09-14 18:11:13

标签: python user-interface tkinter

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

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

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

生成事件的类:

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

1 个答案:

答案 0 :(得分: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的包装器,它使线程安全。