|
|
@@ -0,0 +1,158 @@
|
|
|
+#########################################################
|
|
|
+## 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_()
|