【发布时间】: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 不支持这一点。