This is a GreatWorld...

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from PySide6.QtCore import Qt, QPoint
  2. from PySide6.QtGui import QMovie
  3. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QMenu, QVBoxLayout
  4. class MainWindow(QWidget):
  5. def __init__(self):
  6. super().__init__()
  7. self.setWindowTitle("派大星")
  8. self.setGeometry(100, 100, 300, 300)
  9. self.setAttribute(Qt.WA_TranslucentBackground)
  10. self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
  11. self.setStyleSheet("background-color: transparent;") # 设置背景颜色为透明
  12. self.layout = QVBoxLayout(self) # 创建一个垂直布局
  13. self.setLayout(self.layout) # 设置窗口的布局
  14. def center_on_screen(self):
  15. screen_geometry = QApplication.primaryScreen().geometry()
  16. window_geometry = self.frameGeometry()
  17. center_point = screen_geometry.center()
  18. window_geometry.moveCenter(center_point)
  19. self.move(window_geometry.topLeft())
  20. self.gif(0) # 默认显示第一个GIF
  21. def mousePressEvent(self, event):
  22. if event.button() == Qt.LeftButton:
  23. self.drag_position = event.globalPos() - self.frameGeometry().topLeft()
  24. elif event.button() == Qt.RightButton:
  25. self.showContextMenu(event.globalPos())
  26. def mouseMoveEvent(self, event):
  27. if event.buttons() == Qt.LeftButton and self.drag_position:
  28. self.move(event.globalPos() - self.drag_position)
  29. def showContextMenu(self, pos):
  30. menu = QMenu(self)
  31. self.setMenuStyle(menu)
  32. # 菜单项添加数据以便识别
  33. menu.addAction("表演", lambda: self.gif(0))
  34. menu.addAction("跌倒", lambda: self.gif(1))
  35. menu.addAction("玩耍", lambda: self.gif(2))
  36. menu.addAction("退出", self.close)
  37. menu.exec(pos)
  38. def setMenuStyle(self, menu):
  39. menu.setStyleSheet("""
  40. QMenu {background-color: rgba(215,215,215,1);}
  41. QMenu::item {color: rgba(51,51,51,0.8);}
  42. QMenu::item:hover {background-color: #409CE1;}
  43. QMenu::item:selected {background-color: #409CE1;}
  44. """)
  45. def gif(self, index):
  46. # 移除之前所有的GIF
  47. if self.layout.count():
  48. for i in range(self.layout.count()):
  49. widget = self.layout.itemAt(i).widget()
  50. if widget:
  51. widget.deleteLater()
  52. label = QLabel(self)
  53. label.move(150, 150)
  54. if index == 0:
  55. movie = QMovie("./DsktopPet/img/pi_perform.gif")
  56. elif index == 1:
  57. movie = QMovie("./DsktopPet/img/pi_fall.gif")
  58. else:
  59. movie = QMovie("./DsktopPet/img/pi_play.gif")
  60. label.setMovie(movie)
  61. movie.start()
  62. self.layout.addWidget(label) # 将新的QLabel添加到布局中
  63. if __name__ == "__main__":
  64. app = QApplication([])
  65. window = MainWindow()
  66. window.center_on_screen() # 将窗口居中
  67. window.show()
  68. app.exec()