SetWindowFlags 立即关闭程序

问题描述

我正在尝试在名为 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...