frameless_window.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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_()