实现效果:
实现代码:
from widgets.components.base_frameless_widget import BaseFramelessWidget
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5 import QtNetwork
from widgets.components.base_button import BaseButton,ButtonSize, ButtonType
import sys
from PyQt5 import QtWidgets
class MsgHintWidget(BaseFramelessWidget):
def __init__(self, parent=None):
super(MsgHintWidget, self).__init__(parent)
self.setAttribute(Qt.WA_TranslucentBackground) # 场景透明
self.setAttribute(Qt.WA_StyledBackground, True)
self.init_all()
def init_all(self):
self.setFixedSize(QSize(300,200))
self.vbox_layout = QVBoxLayout()
self.setLayout(self.vbox_layout)
self.vbox_layout.setContentsMargins(0,0,0,0)
self.title_widget = QWidget()
# self.title_widget.setAttribute(Qt.WA_StyledBackground, True)
self.title_widget.setStyleSheet("QWidget{background-color: rgb(12, 13, 19); color: white; font: 12px;}")
self.title_label = QLabel()
self.title_label.setText("错误信息")
self.title_widget_layout = QHBoxLayout()
self.title_widget.setLayout(self.title_widget_layout)
self.title_widget_layout.addWidget(self.title_label,0,Qt.AlignHCenter)
self.title_widget.setFixedHeight(30)
self.vbox_layout.addWidget(self.title_widget,0,Qt.AlignTop)
self.error_logo_label = QLabel()
self.error_logo_label.setFixedSize(QSize(33,38))
error_logo = QPixmap()
error_logo.load("resource/image/icon_error.png")
error_logo = error_logo.scaled( self.error_logo_label.width(), self.error_logo_label.height(), Qt.KeepAspectRatioByExpanding)
self.error_logo_label.setPixmap(error_logo)
self.error_logo_label.setStyleSheet("QLabel{background-color: rgb(28, 31, 46); color: white; font: 12px;}")
self.error_layout = QHBoxLayout()
self.error_layout.addWidget(self.error_logo_label,0,Qt.AlignHCenter)
self.vbox_layout.addItem(QSpacerItem(10, 10, QSizePolicy.Fixed, QSizePolicy.Fixed))
self.vbox_layout.addLayout(self.error_layout)
self.vbox_layout.addItem(QSpacerItem(10, 10, QSizePolicy.Fixed, QSizePolicy.Fixed))
self.error_info_label = QLabel()
self.error_info_label.setStyleSheet("QLabel{background-color: rgb(28, 31, 46); color: white; font: 12px;}")
self.error_info_layout = QHBoxLayout()
self.error_info_layout.addWidget(self.error_info_label,0,Qt.AlignHCenter)
self.vbox_layout.addLayout(self.error_info_layout)
self.vbox_layout.addItem(QSpacerItem(10, 10, QSizePolicy.Fixed, QSizePolicy.Fixed))
self.close_button = BaseButton()
self.close_button.init_button('确认',"",ButtonType.BUTTON_INFO)
self.close_button.setStyleSheet(self.close_button.styleSheet()+ "QPushButton{font:12px;}")
self.close_button.clicked.connect(self.slots_close_event)
self.close_button.setFixedSize(QSize(65,32))
self.close_layout = QHBoxLayout()
self.close_layout.addWidget(self.close_button,0,Qt.AlignHCenter)
self.vbox_layout.addLayout(self.close_layout)
self.vbox_layout.addStretch()
def msg_error_info(self, info: str, title:str = ""):
# self.setStyleSheet("QWidget{background-color: rgb(28, 31, 46); }")
self.error_info_label.setText(info)
if title != "":
self.title_label.setText(title)
pass
def slots_close_event(self):
"""
退出程序
"""
self.close()
def paintEvent(self, a0: QPaintEvent) -> None:
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
brush = QBrush(Qt.SolidPattern)
color = QColor()
color.setRgb(28, 31, 46)
brush.setColor(color)
painter.setBrush(brush)
painter.setPen(Qt.transparent)
rect = self.rect()
rect.setWidth(rect.width() )
rect.setHeight(rect.height() )
painter.drawRoundedRect(rect, 8, 8)
if __name__ == "__main__":
print("HelloWorld")
QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
app = QtWidgets.QApplication([""])
widget = MsgHintWidget()
widget.msg_error_info("siji")
# widget.setFixedSize(QSize(300,200))
widget.show()
ret = app.exec_()
sys.exit(ret)