问题描述
我正在尝试在名为 Anki 的软件中运行以下脚本。这基本上是一个插件(一个插件),使程序始终处于顶部。这是 MRE:
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication,QWidget
import time
app = QApplication([])
window = QWidget()
window.show()
def start():
while True:
window.setwindowFlags(Qt.WindowStaysOnTopHint)
#window.show()
#app.exec()
time.sleep(1)
start()
这是我可以更接近我得到的实际错误。每当程序运行 window.setwindowFlags(Qt.WindowStaysOnTopHint)
行时,它会立即关闭窗口并且无法访问 window.show()
。由于这只是基本应用程序的插件,我假设所有插件都是在主窗口打开后和主窗口内加载的。因此,如果您关闭主窗口,所有插件也会停止运行。如何防止主窗口关闭?
解决方法
应该只有一个 QApplication,并且您不必创建新的 QApplication,因为 anki 创建了它。 while True 也不是必需的,因为它会阻塞事件循环,甚至更少使用 time.sleep,因为它也会阻塞事件循环。
import time
from aqt import gui_hooks
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget
window = QWidget()
window.setWindowFlags(window.windowFlags() | Qt.WindowStaysOnTopHint)
gui_hooks.main_window_did_init.append(window.show)