赞
踩
控件的坐标系统
大小位置
相关API
获取大小和位置的API
API | 说明 |
---|---|
x() | 相对于父控件的x位置,包含窗口框架。 顶层控件则是相对于桌面的x位置 |
y() | 相对于父控件的y位置,包含窗口框架。 顶层控件则是相对于桌面的y位置 |
pos() | 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() | 框架尺寸 |
- from PyQt5.Qt import *
- import sys
-
-
- app = QApplication(sys.argv)
- # 创建一个QWidget控件
- w = QWidget()
- w.setWindowTitle('WindowTitle')
- w.resize(200, 200)
- w.move(100, 100)
- # geometry获取用户区域到父控件的x、y、width、height
- # 控件展示之前,数据不准确
- print(w.geometry())
-
- w.show()
- # geometry获取用户区域到父控件的x、y、width、height
- print(w.geometry())
-
- sys.exit(app.exec_())

- PyQt5.QtCore.QRect(100, 100, 200, 200)
- PyQt5.QtCore.QRect(101, 138, 200, 200)
图解
设置大小和位置的API
API | 说明 |
---|---|
move(x, y) | 设置的是x, y;也就是pos。包括窗口框架 |
resize(width, height) | 设置的是宽和高。不包括窗口框架 |
setGeometry(x, y, width, height) | 同时设置控件用户区域的x、y、width、height。 顶层控件需要先展示,后设置 |
adjustSize() | 根据内容自适应大小 |
setFixedSize() | 设置固定尺寸大小,不允许拖拉宽度和高度 |
演示代码
- from PyQt5.Qt import *
- import sys
-
-
- app = QApplication(sys.argv)
- # 创建一个QWidget控件
- w1 = QWidget()
- w1.setWindowTitle('WindowTitle1')
- w1.move(200, 100)
- w1.resize(500, 500)
-
- label1 = QLabel(w1)
- label1.setText('QLabel1')
- label1.move(100,100)
- label1.setStyleSheet('background-color: cyan;')
-
-
- w2 = QWidget()
- w2.setWindowTitle('WindowTitle2')
- w1.move(200, 100)
- w2.setFixedSize(500, 500)
-
- label2 = QLabel(w2)
- label2.setText('QLabel2')
- label2.move(100,100)
- label2.setStyleSheet('background-color: red;')
-
- def cao1():
- initial_lab1 = label1.text()
- initial_lab1 = initial_lab1 + 'QLabel1'
- label1.setText(initial_lab1)
- label1.adjustSize()
-
- def cao2():
- initial_lab2 = label2.text()
- initial_lab2 = initial_lab2 + 'QLabel2'
- label2.setText(initial_lab2)
-
- btn1 = QPushButton(w1)
- btn1.setText('复制内容')
- btn1.clicked.connect(cao1)
- btn1.move(100,150)
-
- btn2 = QPushButton(w2)
- btn2.setText('复制内容')
- btn2.clicked.connect(cao2)
- btn2.move(100,150)
-
- w1.show()
- w2.show()
- sys.exit(app.exec_())

案例
- import sys
- from PyQt5.Qt import *
-
- app = QApplication(sys.argv)
- window1 = QWidget()
- # 设置用户区域的位置和大小(写到show()后面能看出来)
- window1.setGeometry(300,300, 500, 500)
-
- window2 = QWidget()
- window2.resize(500, 500)
- # 设置窗体的位置和大小,包含框架
- window2.move(300, 300)
-
- window1.show()
- window2.show()
-
-
- sys.exit(app.exec_())

- import sys
- from PyQt5.Qt import *
-
- app = QApplication(sys.argv)
- window = QWidget()
- window.resize(500, 500)
-
- window.show()
-
- # 总的控件个数
- widget_count = 20
- # 一行有多少个控件(列)
- column_count = 3
- # 总行数
- row_count = (widget_count -1 )// column_count + 1
-
- # 一个控件的宽度(要求是个integer整数类型)
- widget_width = int(window.width() / column_count)
- # 一个控件的高度(要求是个integer整数类型)
- widget_height = int(window.height() / row_count)
-
- for i in range(0, widget_count):
- win = QWidget(window)
- win.resize(widget_width, widget_height)
- # 通过控件所在列号*控件宽度,算出x位置(列号是从0开始)
- win_x = i % column_count * widget_width
- # 通过控件所在行号*控件高度,算出y位置(行号是从0开始)
- win_y = i // column_count * widget_height
- win.move(win_x, win_y)
- win.setStyleSheet('background-color:red;border: 1px solid yellow;')
- win.show()
-
- sys.exit(app.exec_())

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。