窗口操作三(封裝)

"""
無邊框
頂層窗口的特定操作封裝重構(gòu)
"""
from PyQt5.Qt import *
import sys


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 設(shè)置無標(biāo)題欄方法2
        self.setWindowFlags(Qt.FramelessWindowHint)
        # 設(shè)置透明度
        self.setWindowOpacity(0.9)
        # 設(shè)置控件
        self.setWindowTitle('窗口特定操作案例')
        # 設(shè)置大小
        self.resize(500, 500)
        # 規(guī)定大小
        self.top_margin = 10
        self.btn_w = 80
        self.btn_h = 40

        self.setup_ui()  # 這個順序很重要!放到前面就報錯

    def setup_ui(self):
        # 添加三個子控件 - 窗口右上角
        close_btn = QPushButton(self)
        self.close_btn = close_btn
        close_btn.setText("關(guān)閉")
        close_btn.resize(self.btn_w, self.btn_h)

        # 最大標(biāo)簽
        max_btn = QPushButton(self)
        self.max_btn = max_btn
        max_btn.setText("最大化")
        max_btn.resize(self.btn_w, self.btn_h)

        # 最小標(biāo)簽
        min_btn = QPushButton(self)
        self.min_btn = min_btn
        min_btn.setText("最小化")
        min_btn.resize(self.btn_w, self.btn_h)

        close_btn.pressed.connect(self.close)

        # 測試 -控制最大化按鈕變大/恢復(fù)功能
        def max_normal():
            if self.isMaximized():
                self.showNormal()
                max_btn.setText('最大化')
            else:
                self.showMaximized()
                max_btn.setText('恢復(fù)')

        max_btn.pressed.connect(max_normal)
        min_btn.pressed.connect(self.showMinimized)

    def resizeEvent(self, QResizeEvent):
        """解決最大化按鈕不會隨窗口自動改變位置的bug"""
        print('窗口大小位置發(fā)生了改變')
        # 關(guān)閉位置
        window_w = self.width()
        close_btn_x = window_w - self.btn_w
        close_btn_y = self.top_margin
        self.close_btn.move(close_btn_x, close_btn_y)

        # 最大化位置
        max_btn_x = close_btn_x - self.btn_w
        max_btn_y = self.top_margin
        self.max_btn.move(max_btn_x, max_btn_y)

        # 最小化位置
        min_btn_x = max_btn_x - self.btn_w
        min_btn_y = self.top_margin
        self.min_btn.move(min_btn_x, min_btn_y)


# 1.創(chuàng)建一個程序?qū)ο?app = QApplication(sys.argv)

# 設(shè)置無標(biāo)題欄方法1
# window = QWidget(flags=Qt.FramelessWindowHint)
# 創(chuàng)建控件
window = Window()

# 展示控件
window.show()
# 退出
sys.exit(app.exec_())

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容