PyQt6: цвет при наведении появляется при восстановлении окнаPython

Программы на Python
Ответить
Anonymous
 PyQt6: цвет при наведении появляется при восстановлении окна

Сообщение Anonymous »

Я только начал изучать PyQt6 на Python. У меня есть следующий код: я нажимаю кнопку «Свернуть», окно исчезает, если я нажимаю кнопку на панели задач, оно возвращается, но когда оно возвращается, кнопка «Свернуть» на очень короткое время имеет цвет фона при наведении, а не начальный. Кто-нибудь знает, почему и как я могу это решить?
файл main.py

Код: Выделить всё

import sys
from PyQt6.QtWidgets import (
QApplication,
QMainWindow,
QWidget,
QHBoxLayout,
QVBoxLayout,
QPushButton,
QFrame,
QLabel,
QDialog
)
from PyQt6.QtGui import (
QIcon,
QCursor,
QMouseEvent,
QPixmap
)
from PyQt6.QtCore import (
Qt,
QPropertyAnimation,
QEasingCurve,
QEvent,
QFile
)

class TitleBar(QWidget):
def __init__(self, parent):
super().__init__(parent)
self.parent = parent
self.setFixedHeight(35)

TitleBar_Layout = QHBoxLayout(self)
TitleBar_Layout.setContentsMargins(0, 0, 0, 0)
TitleBar_Layout.setSpacing(0)

icon_label = QLabel('')
icon_label.setFixedSize(15, 15)

title_label = QLabel('My Window')
title_label.setFixedSize(200, 15)
title_label.setObjectName('title_label')

self.close_button = QPushButton('X')
self.close_button.setFixedSize(35, 35)
self.close_button.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
self.close_button.setFocusPolicy(Qt.FocusPolicy.NoFocus)
self.close_button.clicked.connect(self._close_Window)
self.close_button.setObjectName('close_button')

self.minimize_button = QPushButton('-')
self.minimize_button.setFixedSize(35, 35)
self.minimize_button.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
self.minimize_button.setFocusPolicy(Qt.FocusPolicy.NoFocus)
self.minimize_button.clicked.connect(self._minimize_window)
self.minimize_button.setObjectName('min_button')

TitleBar_Layout.addSpacing(10)
TitleBar_Layout.addWidget(icon_label)
TitleBar_Layout.addSpacing(5)
TitleBar_Layout.addWidget(title_label)
TitleBar_Layout.addStretch()
TitleBar_Layout.addWidget(self.minimize_button)
TitleBar_Layout.addWidget(self.close_button)

self.start_position = None

def mousePressEvent(self, event: QMouseEvent):
if event.button() == Qt.MouseButton.LeftButton:
self.start_position = event.globalPosition().toPoint() -     self.parent.frameGeometry().topLeft()
event.accept()

def mouseMoveEvent(self, event:  QMouseEvent):
if event.buttons() == Qt.MouseButton.LeftButton and self.start_position:
self.parent.move(event.globalPosition().toPoint() - self.start_position)
event.accept()

def _close_Window(self):
self.parent.close()

def _minimize_window(self):
self.parent.showMinimized()

class ChildWindow(QDialog):
def __init__(self, parent):
super().__init__()
self.setFixedSize(200, 200)
self.setWindowIcon(QIcon('icons/sun.png'))
self.setWindowTitle('Modal Window')

class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowFlags(Qt.WindowType.FramelessWindowHint)
self.setWindowTitle('My Window')
self.setWindowIcon(QIcon('icons/sun.png'))
self.setFixedSize(400, 500)

self.centerWindow()

WindowContainer = QWidget(self)
self.setCentralWidget(WindowContainer)

self.TitleBar = TitleBar(self)
self.setMenuWidget(self.TitleBar)

WindowGrid = QVBoxLayout()
WindowGrid.setAlignment(Qt.AlignmentFlag.AlignCenter)

frame = QFrame()
frame.setFixedSize(250, 400)
frame.setObjectName('frame')

show_dialog = QPushButton('Show Dialog', frame)
show_dialog.clicked.connect(self.showDialog)
show_dialog.setObjectName('open_child_window')

WindowGrid.addWidget(show_dialog)

WindowContainer.setLayout(WindowGrid)

def showDialog(self):
self.dg = ChildWindow(self)
self.dg.exec()

def centerWindow(self):
primary_screen = QApplication.primaryScreen()
primary_screen_geometry = primary_screen.availableGeometry()

center_x = (primary_screen_geometry.width() - self.width()) // 2
center_y = (primary_screen_geometry.height() - self.height()) // 2

self.move(center_x, center_y)

if __name__ == '__main__':
app = QApplication([])
window = Window()
with open('style.qss', 'r') as f:
style = f.read()
# Set the stylesheet of the application
app.setStyleSheet(style)
window.show()
sys.exit(app.exec())
Файл style.qss

Код: Выделить всё

* {
background-color: #222222;
}

#close_button {
border: 0px;
background-color: #222222;;
margin: 0px;
padding: 0px;
}

#close_button:hover {
background-color: #ff0000;
}

#min_button {
border: 0px;
background-color: #222222;
margin: 0px;
padding: 0px;
}

#min_button:hover {
background-color: #464646;
}

#frame {
background-color: #c0c0c0;
}

#open_child_window {
background-color: #0066cc;
color: #ffffff;
border: 0px;
width: 150;
height: 30;
border-radius: 5px;
}

#open_child_window:hover {
background-color: #1172d4;
}

#title_label {
color: #bababa;
font-size: 12px;
}

Я также спросил GhatGPT, но предложенные им решения не дали никакого эффекта.
Надеюсь, во время копирования и вставки у меня не возникнет ошибок в коде. Это работает, но с эстетической точки зрения меня раздражает цвет при наведении, который появляется при восстановлении окна.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-window
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»