Python 带有标志的PyQt5主窗口立即超出范围
我使用Qt设计器创建了UI。然后,我将ui文件转换为.py文件(pyuic-x)——如果直接启动,它可以正常工作。然后,我尝试在一个单独的文件中对ui进行子类化,以实现额外的逻辑。这就是事情开始出错的地方。从QMainWindow和我的Qt设计器文件继承可以正常工作,没有问题,正如预期的那样。然而,当我为我的QMainWindow设置任何WindowFlag(任何标志-我尝试了这些:StaysOnTop,FramelessWindowHint)并运行该文件时,窗口出现并立即消失。该程序继续在控制台窗口中运行,或作为PyCharm进程运行,但该窗口已消失。在我看来,它似乎超出了范围——但为什么设置一个简单的标志会对垃圾收集器产生任何影响呢?有人能解释一下这种行为吗 再现此现象所需的最低代码:Python 带有标志的PyQt5主窗口立即超出范围,python,garbage-collection,pyqt5,Python,Garbage Collection,Pyqt5,我使用Qt设计器创建了UI。然后,我将ui文件转换为.py文件(pyuic-x)——如果直接启动,它可以正常工作。然后,我尝试在一个单独的文件中对ui进行子类化,以实现额外的逻辑。这就是事情开始出错的地方。从QMainWindow和我的Qt设计器文件继承可以正常工作,没有问题,正如预期的那样。然而,当我为我的QMainWindow设置任何WindowFlag(任何标志-我尝试了这些:StaysOnTop,FramelessWindowHint)并运行该文件时,窗口出现并立即消失。该程序继续在控制
from ui import Ui_MainWindow
from PyQt5 import QtCore, QtWidgets, QtGui
import sys
class Logic(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.setupUi(self)
self.show()
# self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
# self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_NoSystemBackground, True)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = Logic()
sys.exit(app.exec_())
窗口应出现并保持在屏幕上,直到一个(或多个)标志被取消注释。我将Python 3.8(32位)与PyQt5结合使用。PyCharm提供的运行环境。Windows 10。来自:
注意:此函数在更改窗口的标志时调用setParent(),从而隐藏小部件。必须调用show()使小部件再次可见
因此,只需在设置标志后移动self.show()
,或者从\uuuu init\uuuu
外部调用它(在创建实例后),这是最常见和建议的方法,因为只有在实例化小部件后才显示小部件被认为是一种良好的做法