frameless_window.py 4.6 KB

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