【问题标题】:Tkinter and Twisted - creating a deamonic reactor in Python#Tkinter 和 Twisted - 在 Python 中创建一个恶魔反应器#
【发布时间】:2018-03-03 07:44:09
【问题描述】:

我正在尝试使用 tkinter 并在 python 3 中扭曲。 我遵循了这个答案,Threading With Twisted and Tkinter,它允许我运行它。

但问题是当代码崩溃或被用户关闭时,reactor 并没有停止。如何设置它,使反应器成为 tkinter 程序的守护程序。到目前为止,我试图让它在我关闭 tkinter gui 时关闭反应器,这不是理想的行为(因为我希望在任何故障情况下都关闭)但如果我能得到它,这将是第一步上班。

我的代码在下面

from twisted.internet import reactor, protocol
import tkinter as tk
import tksupport
import GUI 
def on_closing():
    reactor.stop()
    tksupport.uninstall()
    root.destroy()


root = GUI.BruGUI()
tksupport.install(root)
root.protocol("WM_DELETE_WINDOW", on_closing)
reactor.run()

tksupport 代码来自上一个链接。

【问题讨论】:

  • “崩溃”是什么意思?你是什​​么意思“反应堆没有停止”?
  • 所以如果我尝试通过停止 gui 来关闭程序,那么 gui 将停止但反应器不会停止。当我再次尝试运行上述程序时,我收到错误 ReactorNotRestartable
  • 上述程序不会重新启动反应器。您正在真正运行的程序中有哪些额外内容?
  • 问题是它在关闭 gui 时不会停止反应器。这意味着当我再次启动脚本时(在它停止之后),它会产生反应堆不可重新启动的错误。这就是为什么我希望能够在 gui 关闭时使反应堆关闭。
  • 当您说“关闭”时,我想将其解释为“进程退出”,但我想这不是会发生什么。不过,我只是猜测。您能否详细解释正在发生的事情,以便您的读者跟进?考虑 sscce.org>。关于您对异常的阅读,“反应堆不可重新启动”并不意味着“您试图在反应堆运行时启动它”。这意味着“您尝试在同一过程中启动反应堆两次”。 Twisted reactor 不支持这一点。

标签: python tkinter twisted


【解决方案1】:

一种简单的方法是将它放在 try/except 块中,但这通常只是一种解决方法:

try:
    from twisted.internet import reactor, protocol
    import tkinter as tk
    import tksupport
    import GUI 
    def on_closing():
        reactor.stop()
        tksupport.uninstall()
        root.destroy()


    root = GUI.BruGUI()
    tksupport.install(root)
    root.protocol("WM_DELETE_WINDOW", on_closing)
    reactor.run()

except:
    reactor.stop()
    tksupport.uninstall()
    root.destroy()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2014-09-07
    • 2021-10-30
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多