prog_linenum

2024年3月8日 星期五

test

測試...

"""
程式功能:
1. 基本視窗建立
2. 如何計算視窗在螢幕中間位置
3. 如何計算label元件在視窗中位置
4. 如何在調整視窗大小時,label元件固定在視窗中央
5. 如何取得滑鼠移動座標

"""
import sys
from PySide6.QtCore import Qt
from PySide6.QtGui import QFont
from PySide6.QtWidgets import (
    QWidget, QLabel, QApplication)


class MyApp(QWidget):
    def __init__(self):
        # super(MyApp, self).__init__()
        # super()參數列可省略
        super().__init__()
        self.param_init()
        # 建立Label
        self.lblTextShow = QLabel(self)
        self.lblMousePos = QLabel(self)
        # 初始化界面
        self.init_ui()

    def param_init(self):
        """
        全域參數初始化
        :return: None
        """

        self.MAIN_WINDOW_SIZE_WIDTH: int = 300
        self.MAIN_WINDOW_SIZE_HEIGHT: int = 300
        self.LABEL_SIZE_WIDTH: int = 100
        self.LABEL_SIZE_HEIGHT: int = 50
        self.LABEL_SIZE_WIDTH_HALF: int = self.LABEL_SIZE_WIDTH // 2
        self.LABEL_SIZE_HEIGHT_HALF: int = self.LABEL_SIZE_HEIGHT // 2

        self.SCREEN_CENTER_WIDTH = self.screen().size().width() // 2
        self.SCREEN_CENTER_HEIGHT = self.screen().size().height() // 2

    def init_ui(self):
        self.set_main_window_center()
        self.setWindowTitle('基本視窗示範')  # 設定視窗抬頭
        self.setMouseTracking(True)  # 要為True才能觸發mouseMoveEvent()事件
        self.lblTextShow.setGeometry(100, 100,
                                     self.LABEL_SIZE_WIDTH,
                                     self.LABEL_SIZE_HEIGHT)

        self.lblTextShow.setText("Hello World!")
        self.lblMousePos.setText("(0,0)")
        self.lblMousePos.setFont(QFont('Arial', 18))
        self.lblMousePos.resize(150, self.lblMousePos.height())
        self.lblMousePos.move(10, 10)

        self.lblTextShow.setStyleSheet("background-color: gold")
        self.lblMousePos.setStyleSheet("background-color:lightgreen")

        self.lblTextShow.setAlignment(Qt.AlignmentFlag.AlignHCenter.AlignCenter)

        self.show()

    def set_main_window_center(self) :
        """
        設定視窗在螢幕正中央
        :return:
        """
        # 取得視窗中間位置
        mw_x_pos = self.SCREEN_CENTER_WIDTH - (self.MAIN_WINDOW_SIZE_WIDTH // 2)
        mw_y_pos = self.SCREEN_CENTER_HEIGHT - (self.MAIN_WINDOW_SIZE_HEIGHT // 2)
        # 設定視窗位置、大小(x,y,w,h)
        self.setGeometry(mw_x_pos, mw_y_pos,
                         self.MAIN_WINDOW_SIZE_WIDTH,
                         self.MAIN_WINDOW_SIZE_HEIGHT)

    # 視窗當建立時、有變更大小時會觸發
    def resizeEvent(self, event):
        print('resize')
        w = (self.width() // 2) - self.LABEL_SIZE_WIDTH_HALF
        h = (self.height() // 2) - self.LABEL_SIZE_HEIGHT_HALF

        self.lblTextShow.setGeometry(w, h,
                                     self.LABEL_SIZE_WIDTH,
                                     self.LABEL_SIZE_HEIGHT)

    def mouseMoveEvent(self, event):
        # self.label.setText('Mouse coords: ( %d : %d )' % (event.x(), event.y()))
        self.lblMousePos.setText('( %d : %d )' % (event.x(), event.y()))
        print('Mouse coords: ( %d : %d )' % (event.x(), event.y()))


if __name__ == '__main__':
    app = QApplication()
    ex = MyApp()
    sys.exit(app.exec())

沒有留言:

張貼留言

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

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