我有 python 文件系统(看门狗)代码成功地从它自己的线程触发了 pyqtSignal#emit() 调用(由 pdb 跟踪证明)。
这个信号应该通过 connect(...) 连接到我自己的 QObject 上相应的 @pyqtSlot 函数,但实际上,当文件系统更改触发发射时,目标函数从未被调用。
示例代码可以在 https://github.com/cefn/xmlorgmode/blob/2b97ff9994132def035d325fc7f7095c9fe187f2/index.py查看
并且可以如下调用,从同一个文件夹传入一个 XML 文件和一个 XQuery 文件。
python index.py index.xml index.xq
这是第一次完美加载,但文件系统触发时不会发生刷新,如果我的代码有效,这是我所期望的。失败是沉默的。
谁能建议我需要的额外事件循环结构,看门狗触发的发射对应于对 QueryDisplay#update(...) 的调用?
背景
我一直在尝试将动态构造的 HTML 传递给由文件夹中的文本文件支持的 QWebView,这些文本文件偶尔会发生变化。由于 QWebView#setHtml(...) 在其自己的线程中调用的要求,我不得不尝试找出信号和插槽,并且我遇到了障碍。我到达的线程安排不知何故坏了,但我不知道是怎么回事。
我无法确定我的 QObject 应该如何与适当线程中的事件循环相关联,以便可以处理发出的事情。调试运行代码后,QApplication、QWebView 和我的 QObject 在与 pdb 交互调用 #thread() 以建立亲和力时都共享同一个线程,就在进入 app.exec_() 循环之前。我认为这意味着所有这些对象的所有事件都将在 app.exec_() 中处理,但我一定以某种方式误解了模型。
(Pdb) adaptor.thread()
<PyQt4.QtCore.QThread object at 0xb30c3c44>
(Pdb) display.view.thread()
<PyQt4.QtCore.QThread object at 0xb30c3c44>
(Pdb) app.thread()
<PyQt4.QtCore.QThread object at 0xb30c3c44>