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

窗口操作三(封装)

作者: 有之余 | 来源:发表于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_())

相关文章

  • 窗口操作三(封装)

  • 【三】封装DOM操作

    关于专题【vue开发音乐App】 将一些涉及DOM操作的方法封装成dom.js,培养组件化开发的习惯和思维,良好的...

  • 使用Fragment建立动态的UI

    为了使在android上创建动态的,多窗口的用户交互体检,你需要将ui组件和Activity操作封装模块进行使用,...

  • 面向对象的特征(封装、继承、多态)

    Java面向对象的三大特征:封装、继承和多态 封装: 封装就是把抽象出的数据和对数据的操作封装在一起,数据被...

  • iOS开发常用第三方库

    第三方库 ?AFNetworking 网络操作封装ASIHttpRequestMKNetworkKit?S...

  • 面向对象三大特性

    三大特性 封装每个对象都包含它能进行的操作所需要的所有信息,这个特性称为封装提炼出类 就是在做封装封装的好处 良好...

  • VIM编辑器

    命令模式 WORD操作 行操作 窗口操作 文档操作

  • FFmpeg分解与复用

    输入文件——>解封装——> 操作——> 封装 ——>输出文件

  • 面向对象编程三大特性

    三大特征 封装 继承 多态 封装性 封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部...

  • Java

    10.11 1.Java的三大特征:封装、继承、多态 封装:利用抽象数据类型将数据和基于数据的操作封装在一起,数据...

网友评论

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

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