PyQt基础第3篇——自定义窗口(隐藏最大最小化按钮)

来源:互联网 发布:淘宝水族箱品牌排行榜 编辑:程序博客网 时间:2024/06/06 08:38

          很多Qter被网上类似于QQ和360的Qt界面吸引,如果想有这样的“神通”,那第一步就要学会怎么自定义一个窗体,来实现自己美化后的最大化最小化按钮。本文先不涉及美化图片。先从实现的角度来展示一个自定义窗体,体验一下PyQt下的自定义窗体。

        代码如下:(可直接运行,支持拖动)

        

# -*- coding:utf-8 -*-import sysfrom PyQt5.QtWidgets import QDialog from PyQt5.QtWidgets import QPushButtonfrom PyQt5.QtWidgets import QToolButtonfrom PyQt5.QtWidgets import QApplicationfrom PyQt5.QtWidgets import QHBoxLayoutfrom PyQt5.QtWidgets import QVBoxLayoutfrom PyQt5.QtWidgets import QStylefrom PyQt5.QtGui import QPixmapfrom PyQt5.QtGui import QIconfrom PyQt5.QtGui import QPainterfrom PyQt5.QtCore import Qtfrom PyQt5.QtCore import QPointclass CustomDoialog(QDialog):    def __init__(self,parent = None):        super().__init__(parent)                #设置窗体无边框        self.setWindowFlags(Qt.FramelessWindowHint)                #获取最大化,最小化和关闭按钮        pixMin = self.style().standardIcon(QStyle.SP_TitleBarMinButton)        pixMax = self.style().standardIcon(QStyle.SP_TitleBarMaxButton)        pixNormal = self.style().standardIcon(QStyle.SP_TitleBarNormalButton)        pixClose = self.style().standardIcon(QStyle.SP_TitleBarCloseButton)                minButton = QToolButton()        maxButton = QToolButton()        normalButton = QToolButton()        closeButton = QToolButton()                minButton.setIcon(QIcon(pixMin))        maxButton.setIcon(QIcon(pixMax))        closeButton.setIcon(QIcon(pixClose))                #布局设置        titleLayout = QHBoxLayout()        titleLayout.addStretch()        titleLayout.addWidget(minButton)        titleLayout.addWidget(maxButton)        titleLayout.addWidget(closeButton)                mainLayout = QVBoxLayout()        mainLayout.addLayout(titleLayout)        mainLayout.addStretch()                self.setLayout(mainLayout)                self.__leftButtonPress = False #判断鼠标是否按下        self.__movePoint = QPoint() #获取开始移动的点,用来计算移动位置            #重写鼠标按下事件    def mousePressEvent(self,event):        if event.button() == Qt.LeftButton:            self.__leftButtonPress = True            self.__movePoint = event.pos()        #重写鼠标移动事件    def mouseMoveEvent(self,event):        if self.__leftButtonPress:            globalPos = event.globalPos()            self.move(globalPos - self.__movePoint)        #重写鼠标抬起事件    def mouseReleaseEvent(self,event):        self.__leftButtonPress = False                if __name__ == "__main__":    app = QApplication(sys.argv)    window = CustomDoialog()    window.show()    sys.exit(app.exec_())
效果如图:

        

0 0
原创粉丝点击