代码之家  ›  专栏  ›  技术社区  ›  Alfe

使_tkinter.createfilehandler再次工作(或提供解决方法)

  •  2
  • Alfe  · 技术社区  · 10 年前

    我有一些旧的Python脚本,它们使用了不同版本的 tkinter 比当前系统配备的。回到过去,一个名为 _tkinter.createfilehandler() 存在并工作。对于当前版本,这将返回一个 RuntimeError 异常:

    Traceback (most recent call last):
      File "src/text.py", line 513, in <module>
        tkinter.createfilehandler(pipe_r, READABLE, drain_pipe)
    RuntimeError: _tkinter.createfilehandler not supported for threaded Tcl
    

    我试图运行的脚本是这样的(当然是缩短版):

    #!/usr/bin/env python
    
    import os
    from Tkinter import *
    
    (pipe_r, pipe_w) = os.pipe()
    
    # ...
    
    def drain_pipe(a, b):
        # handle data from pipe_r
        # ...
    
    tkinter.createfilehandler(pipe_r, READABLE, drain_pipe)
    
    tk.mainloop()
    

    有没有一个简单的方法可以让它再次运行?我确信有一种方法可以转换脚本(或者根据不同的范例重新编写脚本),但我很高兴有一个不需要进行太多更改的黑客(也许有一个开关可以以某种方式再次启用),因为我有几个这样的脚本,而且不需要进行大量修补。

    1 回复  |  直到 10 年前
        1
  •  3
  •   isedev    10 年前

    如果 tk 是一个 Tk() 对象,然后使用 tk.createfilehandler 相反