在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中)
任何人都可以解释这种行为并给出解决方案吗?
答案 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)
由于该窗口不可见,因此标题栏不再显示。