prog_linenum

2024年3月8日 星期五

test

測試...
  1.  
  2. """
  3. 程式功能:
  4. 1. 基本視窗建立
  5. 2. 如何計算視窗在螢幕中間位置
  6. 3. 如何計算label元件在視窗中位置
  7. 4. 如何在調整視窗大小時,label元件固定在視窗中央
  8. 5. 如何取得滑鼠移動座標
  9.  
  10. """
  11. import sys
  12. from PySide6.QtCore import Qt
  13. from PySide6.QtGui import QFont
  14. from PySide6.QtWidgets import (
  15. QWidget, QLabel, QApplication)
  16.  
  17.  
  18. class MyApp(QWidget):
  19. def __init__(self):
  20. # super(MyApp, self).__init__()
  21. # super()參數列可省略
  22. super().__init__()
  23. self.param_init()
  24. # 建立Label
  25. self.lblTextShow = QLabel(self)
  26. self.lblMousePos = QLabel(self)
  27. # 初始化界面
  28. self.init_ui()
  29.  
  30. def param_init(self):
  31. """
  32. 全域參數初始化
  33. :return: None
  34. """
  35.  
  36. self.MAIN_WINDOW_SIZE_WIDTH: int = 300
  37. self.MAIN_WINDOW_SIZE_HEIGHT: int = 300
  38. self.LABEL_SIZE_WIDTH: int = 100
  39. self.LABEL_SIZE_HEIGHT: int = 50
  40. self.LABEL_SIZE_WIDTH_HALF: int = self.LABEL_SIZE_WIDTH // 2
  41. self.LABEL_SIZE_HEIGHT_HALF: int = self.LABEL_SIZE_HEIGHT // 2
  42.  
  43. self.SCREEN_CENTER_WIDTH = self.screen().size().width() // 2
  44. self.SCREEN_CENTER_HEIGHT = self.screen().size().height() // 2
  45.  
  46. def init_ui(self):
  47. self.set_main_window_center()
  48. self.setWindowTitle('基本視窗示範') # 設定視窗抬頭
  49. self.setMouseTracking(True) # 要為True才能觸發mouseMoveEvent()事件
  50. self.lblTextShow.setGeometry(100, 100,
  51. self.LABEL_SIZE_WIDTH,
  52. self.LABEL_SIZE_HEIGHT)
  53.  
  54. self.lblTextShow.setText("Hello World!")
  55. self.lblMousePos.setText("(0,0)")
  56. self.lblMousePos.setFont(QFont('Arial', 18))
  57. self.lblMousePos.resize(150, self.lblMousePos.height())
  58. self.lblMousePos.move(10, 10)
  59.  
  60. self.lblTextShow.setStyleSheet("background-color: gold")
  61. self.lblMousePos.setStyleSheet("background-color:lightgreen")
  62.  
  63. self.lblTextShow.setAlignment(Qt.AlignmentFlag.AlignHCenter.AlignCenter)
  64.  
  65. self.show()
  66.  
  67. def set_main_window_center(self) :
  68. """
  69. 設定視窗在螢幕正中央
  70. :return:
  71. """
  72. # 取得視窗中間位置
  73. mw_x_pos = self.SCREEN_CENTER_WIDTH - (self.MAIN_WINDOW_SIZE_WIDTH // 2)
  74. mw_y_pos = self.SCREEN_CENTER_HEIGHT - (self.MAIN_WINDOW_SIZE_HEIGHT // 2)
  75. # 設定視窗位置、大小(x,y,w,h)
  76. self.setGeometry(mw_x_pos, mw_y_pos,
  77. self.MAIN_WINDOW_SIZE_WIDTH,
  78. self.MAIN_WINDOW_SIZE_HEIGHT)
  79.  
  80. # 視窗當建立時、有變更大小時會觸發
  81. def resizeEvent(self, event):
  82. print('resize')
  83. w = (self.width() // 2) - self.LABEL_SIZE_WIDTH_HALF
  84. h = (self.height() // 2) - self.LABEL_SIZE_HEIGHT_HALF
  85.  
  86. self.lblTextShow.setGeometry(w, h,
  87. self.LABEL_SIZE_WIDTH,
  88. self.LABEL_SIZE_HEIGHT)
  89.  
  90. def mouseMoveEvent(self, event):
  91. # self.label.setText('Mouse coords: ( %d : %d )' % (event.x(), event.y()))
  92. self.lblMousePos.setText('( %d : %d )' % (event.x(), event.y()))
  93. print('Mouse coords: ( %d : %d )' % (event.x(), event.y()))
  94.  
  95.  
  96. if __name__ == '__main__':
  97. app = QApplication()
  98. ex = MyApp()
  99. sys.exit(app.exec())
  100.  

沒有留言:

張貼留言

【PySide6】視窗事件_視窗本身相關事件

 本文主要是了解視窗事件被觸發的相關時機。 先給一段程式碼: """ 程式名稱:form_event.py 程式功能: 1. 視窗事件被觸發的相關時機 """ import sys from PySide6.QtGu...