python qt resizeEvent 实现改变窗口大小时固定窗口比例

python qt resizeEvent 实现改变窗口大小时固定窗口比例

效果

当用户拖动窗口边缘改变其大小时,窗口仍保持固定的长宽比

在这里插入图片描述

在这里插入图片描述

关键代码

    def resizeEvent(this, event: QResizeEvent):
		ratio=750/550
        next_size=event.size()
        if math.fabs(event.size().width()/event.size().height()-ratio)>0.01:
            if event.oldSize().height()==event.size().height():
                next_size.setHeight(event.size().width()/ratio)
            else:
                next_size.setWidth(event.size().height()*ratio)
        this.resize(next_size)

解释

4行:当要改变的大小长宽比不为我们的期望值(float 计算存在误差,这里使用当前比例与期望比例相减取绝对值探查精度的方法处理)时重新计算相应的长宽

杂谈

刚开始时希望通过event.size().setHeight()的方法改变原始消息的内容再交给原始方法去处理,结果发现函数执行没有效果,数值无法改变(可能指针没有做好映射)

后话

TODO (issue)

  • 我电脑的设置是拖动窗口时不显示窗口内容,实测如果改为显示内容的话,再改变大小会出现严重的闪烁
  • 由于使用的不是原生方法,改变大小过程中指示框并不会保持比例,松开鼠标时窗口才会自动重新确定大小
    在这里插入图片描述

如有建议或优化思路,欢迎评论指正或私信
如果本篇文章对你有帮助,请不要吝啬你的点赞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BrokenClient

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值