titlebar_custom.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. #########################################################
  2. ## customize Title bar
  3. ## dotpy.ir
  4. ## iraj.jelo@gmail.com
  5. #########################################################
  6. import sys
  7. from PyQt5 import QtWidgets, QtGui
  8. from PyQt5 import QtCore
  9. from PyQt5.QtCore import Qt
  10. class TitleBar(QtWidgets.QDialog):
  11. def __init__(self, parent=None):
  12. QtWidgets.QWidget.__init__(self, parent)
  13. self.setWindowFlags(Qt.FramelessWindowHint)
  14. css = """
  15. QWidget{
  16. Background: #0000FF;
  17. color:white;
  18. font:12px bold;
  19. font-weight:bold;
  20. border-radius: 1px;
  21. height: 11px;
  22. }
  23. QDialog{
  24. Background-image:url('img/titlebar bg.png');
  25. font-size:12px;
  26. color: black;
  27. }
  28. QToolButton{
  29. Background:#AA00AA;
  30. font-size:11px;
  31. }
  32. QToolButton:hover{
  33. Background: #FF00FF;
  34. font-size:11px;
  35. }
  36. """
  37. self.setAutoFillBackground(True)
  38. self.setBackgroundRole(QtGui.QPalette.Highlight)
  39. self.setStyleSheet(css)
  40. self.minimize=QtWidgets.QToolButton(self)
  41. self.minimize.setIcon(QtGui.QIcon('img/min.png'))
  42. self.maximize=QtWidgets.QToolButton(self)
  43. self.maximize.setIcon(QtGui.QIcon('img/max.png'))
  44. close=QtWidgets.QToolButton(self)
  45. close.setIcon(QtGui.QIcon('img/close.png'))
  46. self.minimize.setMinimumHeight(10)
  47. close.setMinimumHeight(10)
  48. self.maximize.setMinimumHeight(10)
  49. label=QtWidgets.QLabel(self)
  50. label.setText("Window Title")
  51. self.setWindowTitle("Window Title")
  52. hbox=QtWidgets.QHBoxLayout(self)
  53. hbox.addWidget(label)
  54. hbox.addWidget(self.minimize)
  55. hbox.addWidget(self.maximize)
  56. hbox.addWidget(close)
  57. hbox.insertStretch(1,500)
  58. hbox.setSpacing(0)
  59. self.setSizePolicy(QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Fixed)
  60. self.maxNormal=False
  61. close.clicked.connect(self.close)
  62. self.minimize.clicked.connect(self.showSmall)
  63. self.maximize.clicked.connect(self.showMaxRestore)
  64. def showSmall(self):
  65. box.showMinimized()
  66. def showMaxRestore(self):
  67. if(self.maxNormal):
  68. box.showNormal()
  69. self.maxNormal= False
  70. self.maximize.setIcon(QtGui.QIcon('img/max.png'))
  71. else:
  72. box.showMaximized()
  73. self.maxNormal = True
  74. self.maximize.setIcon(QtGui.QIcon('img/max2.png'))
  75. def close(self):
  76. box.close()
  77. def mousePressEvent(self,event):
  78. if event.button() == Qt.LeftButton:
  79. box.moving = True
  80. box.offset = event.pos()
  81. if event.type() == QtCore.QEvent.MouseButtonDblClick:
  82. self.showMaxRestore()
  83. def mouseMoveEvent(self,event):
  84. if box.isMaximized():
  85. self.showMaxRestore()
  86. box.move(event.globalPos() - box.offset)
  87. else:
  88. if box.moving:
  89. box.move(event.globalPos()-box.offset)
  90. class Frame(QtWidgets.QFrame):
  91. def __init__(self, parent=None):
  92. QtWidgets.QFrame.__init__(self, parent)
  93. self.m_mouse_down= False
  94. self.setFrameShape(QtWidgets.QFrame.StyledPanel)
  95. css = """
  96. QFrame{
  97. Background: #FFFFF0;
  98. color:white;
  99. font:13px ;
  100. font-weight:bold;
  101. }
  102. """
  103. self.setStyleSheet(css)
  104. self.setWindowFlags(Qt.FramelessWindowHint)
  105. self.setMouseTracking(True)
  106. self.m_titleBar= TitleBar(self)
  107. self.m_content= QtWidgets.QWidget(self)
  108. vbox=QtWidgets.QVBoxLayout(self)
  109. vbox.addWidget(self.m_titleBar)
  110. vbox.setContentsMargins(0, 0, 0, 0)
  111. vbox.setSpacing(0)
  112. layout=QtWidgets.QVBoxLayout()
  113. layout.addWidget(self.m_content)
  114. layout.setContentsMargins(5, 5, 5, 5)
  115. layout.setSpacing(0)
  116. vbox.addLayout(layout)
  117. # Allows you to access the content area of the frame
  118. # where widgets and layouts can be added
  119. def contentWidget(self):
  120. return self.m_content
  121. def titleBar(self):
  122. return self.m_titleBar
  123. def mousePressEvent(self,event):
  124. self.m_old_pos = event.pos()
  125. self.m_mouse_down = event.button()== Qt.LeftButton
  126. def mouseMoveEvent(self,event):
  127. x=event.x()
  128. y=event.y()
  129. def mouseReleaseEvent(self,event):
  130. m_mouse_down=False
  131. if __name__ == '__main__':
  132. app = QtWidgets.QApplication(sys.argv)
  133. box = Frame()
  134. box.move(60,60)
  135. l=QtWidgets.QVBoxLayout(box.contentWidget())
  136. l.setContentsMargins(0, 0, 0, 0)
  137. edit=QtWidgets.QLabel("""I would've did anything for you to show you how much I adored you
  138. But it's over now, it's too late to save our loveJust promise me you'll think of me
  139. Every time you look up in the sky and see a star 'cuz I'm your star.""")
  140. l.addWidget(edit)
  141. box.show()
  142. app.exec_()