效果
当用户拖动窗口边缘改变其大小时,窗口仍保持固定的长宽比
关键代码
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)
- 我电脑的设置是拖动窗口时不显示窗口内容,实测如果改为显示内容的话,再改变大小会出现严重的闪烁
- 由于使用的不是原生方法,改变大小过程中指示框并不会保持比例,松开鼠标时窗口才会自动重新确定大小
如有建议或优化思路,欢迎评论指正或私信
如果本篇文章对你有帮助,请不要吝啬你的点赞