pyqt - 出现无框小部件奇怪的标题栏

时间:2016-11-12 02:57:38

标签: python qt python-3.x pyqt pyqt5

在PyQt中运行无框架小部件时,我注意到了一种奇怪的行为。 如果我多次在任务栏中将其最小化,则在几毫秒内左上角会出现Windows XP标题栏,然后消失。

这是一个重现问题的简单代码:

import sys

from PyQt5 import QtCore, QtWidgets


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ui = QtWidgets.QWidget()
    ui.setWindowFlags(ui.windowFlags() | QtCore.Qt.FramelessWindowHint)
    ui.show()
    sys.exit(app.exec_())

此行为在此video

中有所描述

我的设置是Windows 7(x64),Python 3.5和PyQt5.7 (仅供参考,问题也存在于PyQt5.6中)

任何人都可以解释这种行为并给出解决方案吗?

2 个答案:

答案 0 :(得分:2)

我向Qt报告issue,它似乎是一般的Windows错误:

  

Sergio Martins发表评论

     

我可以使用纯Windows示例重现此问题,(将WS_VISIBLE | WS_POPUP | WS_SYSMENU | WS_MINIMIZEBOX传递给CreateWindowEx())。   除了删除最小化按钮功能外,似乎无法修复。

答案 1 :(得分:0)

如果有人仍然有问题:

  • 使窗口半透明
  • 创建一个可用作窗口的小部件

示例:

    class MainWindow(QtWidgets.QMainWindow):

        def __init__(self):
            super(MainWindow, self).__init__()

            self.width = 400
            self.height = 220

            self.initUI()

        def initUI(self):

            self.setWindowFlags(Qt.FramelessWindowHint)
            self.setFixedSize(self.width, self.height)

            self.setAttribute(Qt.WA_TranslucentBackground)

            self.window = QtWidgets.QWidget(self)
            self.window.setStyleSheet("QWidget{background-color: #ffffff;}")
            self.window.setGeometry(0, 0, self.width, self.height)

            self.minimize_button = QtWidgets.QPushButton("?", self.window)
            self.minimize_button.setGeometry(355, 2, 20, 20)
            self.minimize_button.clicked.connect(self.minimize_window)

        def minimize_window(self):
            self.setWindowState(QtCore.Qt.WindowMinimized)

由于该窗口不可见,因此标题栏不再显示。