| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- #########################################################
- ## customize Title bar
- ## dotpy.ir
- ## iraj.jelo@gmail.com
- #########################################################
- import sys
- from PyQt5 import QtWidgets, QtGui
- from PyQt5 import QtCore
- from PyQt5.QtCore import Qt
- class TitleBar(QtWidgets.QDialog):
- def __init__(self, parent=None):
- QtWidgets.QWidget.__init__(self, parent)
- self.setWindowFlags(Qt.FramelessWindowHint)
- css = """
- QWidget{
- Background: #0000FF;
- color:white;
- font:12px bold;
- font-weight:bold;
- border-radius: 1px;
- height: 11px;
- }
- QDialog{
- Background-image:url('img/titlebar bg.png');
- font-size:12px;
- color: black;
- }
- QToolButton{
- Background:#AA00AA;
- font-size:11px;
- }
- QToolButton:hover{
- Background: #FF00FF;
- font-size:11px;
- }
- """
- self.setAutoFillBackground(True)
- self.setBackgroundRole(QtGui.QPalette.Highlight)
- self.setStyleSheet(css)
- self.minimize=QtWidgets.QToolButton(self)
- self.minimize.setIcon(QtGui.QIcon('img/min.png'))
- self.maximize=QtWidgets.QToolButton(self)
- self.maximize.setIcon(QtGui.QIcon('img/max.png'))
- close=QtWidgets.QToolButton(self)
- close.setIcon(QtGui.QIcon('img/close.png'))
- self.minimize.setMinimumHeight(10)
- close.setMinimumHeight(10)
- self.maximize.setMinimumHeight(10)
- label=QtWidgets.QLabel(self)
- label.setText("Window Title")
- self.setWindowTitle("Window Title")
- hbox=QtWidgets.QHBoxLayout(self)
- hbox.addWidget(label)
- hbox.addWidget(self.minimize)
- hbox.addWidget(self.maximize)
- hbox.addWidget(close)
- hbox.insertStretch(1,500)
- hbox.setSpacing(0)
- self.setSizePolicy(QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Fixed)
- self.maxNormal=False
- close.clicked.connect(self.close)
- self.minimize.clicked.connect(self.showSmall)
- self.maximize.clicked.connect(self.showMaxRestore)
- def showSmall(self):
- box.showMinimized()
- def showMaxRestore(self):
- if(self.maxNormal):
- box.showNormal()
- self.maxNormal= False
- self.maximize.setIcon(QtGui.QIcon('img/max.png'))
- else:
- box.showMaximized()
- self.maxNormal = True
- self.maximize.setIcon(QtGui.QIcon('img/max2.png'))
- def close(self):
- box.close()
- def mousePressEvent(self,event):
- if event.button() == Qt.LeftButton:
- box.moving = True
- box.offset = event.pos()
- if event.type() == QtCore.QEvent.MouseButtonDblClick:
- self.showMaxRestore()
- def mouseMoveEvent(self,event):
- if box.isMaximized():
- self.showMaxRestore()
- box.move(event.globalPos() - box.offset)
- else:
- if box.moving:
- box.move(event.globalPos()-box.offset)
- class Frame(QtWidgets.QFrame):
- def __init__(self, parent=None):
- QtWidgets.QFrame.__init__(self, parent)
- self.m_mouse_down= False
- self.setFrameShape(QtWidgets.QFrame.StyledPanel)
- css = """
- QFrame{
- Background: #FFFFF0;
- color:white;
- font:13px ;
- font-weight:bold;
- }
- """
- self.setStyleSheet(css)
- self.setWindowFlags(Qt.FramelessWindowHint)
- self.setMouseTracking(True)
- self.m_titleBar= TitleBar(self)
- self.m_content= QtWidgets.QWidget(self)
- vbox=QtWidgets.QVBoxLayout(self)
- vbox.addWidget(self.m_titleBar)
- vbox.setContentsMargins(0, 0, 0, 0)
- vbox.setSpacing(0)
- layout=QtWidgets.QVBoxLayout()
- layout.addWidget(self.m_content)
- layout.setContentsMargins(5, 5, 5, 5)
- layout.setSpacing(0)
- vbox.addLayout(layout)
- # Allows you to access the content area of the frame
- # where widgets and layouts can be added
- def contentWidget(self):
- return self.m_content
- def titleBar(self):
- return self.m_titleBar
- def mousePressEvent(self,event):
- self.m_old_pos = event.pos()
- self.m_mouse_down = event.button()== Qt.LeftButton
- def mouseMoveEvent(self,event):
- x=event.x()
- y=event.y()
- def mouseReleaseEvent(self,event):
- m_mouse_down=False
- if __name__ == '__main__':
- app = QtWidgets.QApplication(sys.argv)
- box = Frame()
- box.move(60,60)
- l=QtWidgets.QVBoxLayout(box.contentWidget())
- l.setContentsMargins(0, 0, 0, 0)
- edit=QtWidgets.QLabel("""I would've did anything for you to show you how much I adored you
- But it's over now, it's too late to save our loveJust promise me you'll think of me
- Every time you look up in the sky and see a star 'cuz I'm your star.""")
- l.addWidget(edit)
- box.show()
- app.exec_()
|