本文介绍PyQt5中QWidget窗口尺寸的获取以及窗口尺寸的设置。最后通过一个小案例来演示其中一些API的使用。

尺寸的获取

尺寸的获取分为有父控件和没有父控件两种情况。

两种坐标系9

x()

  • 相对于父控件的x位置,包含窗口边框
  • 顶层控件(没有父控件)则相对于桌面的x位置

y()

  • 相对于父控件的y位置,包含窗口边框
  • 顶层控件(没有父控件)则相对于桌面的y位置

pos()

position位置。

  • x和y的组合位置
  • QPoint(x, y):点的位置

width()

  • 控件的宽度
  • 不包含任何窗口框架

height()

  • 控件的高度
  • 不包含任何窗口框架

size()

  • width和height的组合
  • QSize(width, height)

geometry()

  • 用户区域(不包含框架)相对于父控件的位置和尺寸组合
  • QRect(x, y, width, height)

rect()

  • 0, 0, width, height的组合
  • QRect(0, 0, width, height)

frameSize()

框架大小

frameGeometry()

框架尺寸

注意点

控件显示完毕之后,具体的位置或者尺寸数据才会正确

尺寸设置

move(x, y)

控制x和y方向的移动,也就是控制位置

resize(width, height)

操作的是宽高,不包括用户框架

setGeometry(x, y, width, height)

注意此处设置的参照是用户区域

adjustSize()

根据内容自适应

setFixedSize()

设置固定尺寸

案例测试

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = QWidget()
window.move(500, 500)  # 注意正负方向,参考点是左上角为原点

# window.setGeometry(0, 0, 300, 300)  # 窗口的位置在左上角(0,0)处,设置的用户区域
# setGeometry放在前面会出现问题,因为没有show,不知道是否应该算上框架

red = QWidget(window)
red.resize(100, 100)  # 改的是用户区域的宽和高
red.setStyleSheet("background-color: red;")


window.show()  # 显示窗口,不然啥也没有

window.setGeometry(0, 0, 300, 300)  # 放在show后面,就可以保证是用户区域在O处,用户区域大小为300X300

sys.exit(app.exec_())

应用demo

需求:点击一个按钮,每点击一次,label里的字就增加一倍原来的量(复制一遍,一开始是是“123”,点下按钮变成“123123”,以此类推)。要求整个窗口的大小是固定的。

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = QWidget()
window.move(500, 500)  # 注意正负方向,参考点是左上角为原点

label = QLabel(window)
label.setText("123")
label.move(100, 100)
label.setStyleSheet("background-color: cyan")


def CAO():
    content = label.text() + "123"
    label.setText(content)
    label.adjustSize()  # 倘若没有这个自定应,就因为label尺寸显示而不能显示后面


btn = QPushButton(window)
btn.setText("增加内容")
btn.move(100, 300)
btn.clicked.connect(CAO)
window.show()  # 显示窗口,不然啥也没有

# window.setGeometry(200, 200, 500, 500)  # 放在show后面,就可以保证是用户区域在O处,用户区域大小为300X300
window.setFixedSize(500, 500)  # 设置窗口的固定大小

sys.exit(app.exec_())

运行效果:

运行效果


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/chicunhuoqu.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 07 月 12 日
如果觉得我的文章对你有用,请随意赞赏