美文网首页
窗口操作三(封装)

窗口操作三(封装)

作者: 有之余 | 来源:发表于2019-11-07 17:20 被阅读0次
    """
    无边框
    顶层窗口的特定操作封装重构
    """
    from PyQt5.Qt import *
    import sys
    
    
    class Window(QWidget):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            # 设置无标题栏方法2
            self.setWindowFlags(Qt.FramelessWindowHint)
            # 设置透明度
            self.setWindowOpacity(0.9)
            # 设置控件
            self.setWindowTitle('窗口特定操作案例')
            # 设置大小
            self.resize(500, 500)
            # 规定大小
            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("关闭")
            close_btn.resize(self.btn_w, self.btn_h)
    
            # 最大标签
            max_btn = QPushButton(self)
            self.max_btn = max_btn
            max_btn.setText("最大化")
            max_btn.resize(self.btn_w, self.btn_h)
    
            # 最小标签
            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)
    
            # 测试 -控制最大化按钮变大/恢复功能
            def max_normal():
                if self.isMaximized():
                    self.showNormal()
                    max_btn.setText('最大化')
                else:
                    self.showMaximized()
                    max_btn.setText('恢复')
    
            max_btn.pressed.connect(max_normal)
            min_btn.pressed.connect(self.showMinimized)
    
        def resizeEvent(self, QResizeEvent):
            """解决最大化按钮不会随窗口自动改变位置的bug"""
            print('窗口大小位置发生了改变')
            # 关闭位置
            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.创建一个程序对象
    app = QApplication(sys.argv)
    
    # 设置无标题栏方法1
    # window = QWidget(flags=Qt.FramelessWindowHint)
    # 创建控件
    window = Window()
    
    # 展示控件
    window.show()
    # 退出
    sys.exit(app.exec_())
    
    

    相关文章

      网友评论

          本文标题:窗口操作三(封装)

          本文链接:https://www.haomeiwen.com/subject/vsyvbctx.html