在PyQt中,QWidget是一个基本的用户界面类,用于创建可见的窗口组件。QWidget可以包含多种类型的子组件,如QPushButton、QLabel、QLineEdit等。QWidget提供了许多方法来设置组件样式、布局、大小、位置等。
在PyQt中,使用QMainWindow、QDialog、QMessageBox等衍生自QWidget的类来创建不同类型的窗口。
在PyQt中,QWidget提供了一些方法和属性来处理它的大小和位置。
下面是一些设置大小位置信息常用的方法和属性的介绍:
move(x, y)
方法:
resize(width, height)
方法:
setGeometry(x, y, width, height)
方法:
adjustSize()
方法:
setFixedSize(width, height)
方法:
下面是一些获取大小位置信息常用的方法和属性的介绍:
x()
和y()
方法:
pos()
方法:
width()
和height()
方法:
size()
方法:
geometry()
方法:
rect()
属性:
frameSize()
方法:
frameGeometry()
方法:
通过这些方法和属性,你可以方便地获取和设置QWidget的位置和大小信息,对界面进行灵活的布局和调整。
自适应调整标签的大小以使用新的文本内容。
from PyQt5.QtWidgets import *
import sys
def add_PyQt5():
next_text = label.text() + 'PyQt'
label.setText(next_text)
label.adjustSize() # 自适应
if __name__ == '__main__':
app = QApplication(sys.argv)
window = QWidget()
window.resize(200, 200)
label = QLabel(window)
label.setText('PyQt5')
label.setStyleSheet('background-color: cyan;')
btn = QPushButton(window)
btn.setText("增加PyQt5")
btn.move(50, 50)
btn.clicked.connect(add_PyQt5)
window.show()
sys.exit(app.exec_())
运行结果:
在窗口内创建指定个数的子控件。
要求:按照九宫格的布局进行摆放,一行三列。
from PyQt5.QtWidgets import *
import sys
class Create_Widget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
# 设置主窗口的名称和大小
self.setWindowTitle('案例二')
self.resize(300, 300)
# 创建控件
def createWidget(self, num, column_count):
# 计算一个控件的宽度:主窗口的宽度 / 一行多少列
widget_width = self.width() / column_count
# 总共有多少行:编号 // 一行多少列 + 1
row_count = (num-1) // column_count + 1
widget_height = self.height() / row_count
for i in range(num):
w = QWidget(self)
w.resize(widget_width, widget_height)
widget_x = i % column_count * widget_width # 在x轴上移动的位置
widget_y = i // column_count * widget_height # 在y轴上移动的位置
w.move(widget_x, widget_y)
w.setStyleSheet("background-color: red; border: 1px solid yellow;")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Create_Widget()
window.createWidget(100, 5)
window.show()
sys.exit(app.exec_())
运行结果:
在PyQt中,QWidget提供了一些方法来限制其尺寸的最小和最大值。
下面是设置尺寸大小方法的介绍:
setMinimumWidth(width)
和setMinimumHeight(height)
方法:
setMinimumSize(width, height)
方法:
setMaximumWidth(width)
和setMaximumHeight(height)
方法:
setMaximumSize(width, height)
方法:
下面是获取尺寸信息方法的介绍:
minimumWidth()
和minimumHeight()
方法:
minimumSize()
方法:
maximumWidth()
和maximumHeight()
方法:
maximumSize()
方法:
创建一个窗口,设置最小尺寸和最大尺寸。
要求:最小为250, 250,最大为500, 500;测试通过resize是否可以改变。
from PyQt5.QtWidgets import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("最小尺寸最大尺寸限定")
window.setMinimumSize(250, 250) # 设置窗口最小值
window.setMaximumSize(500, 500) # 设置窗口最大值
window.resize(1000, 1000)
window.show()
sys.exit(app.exec_())
将窗口结果进行比较:
运行以上结果,发现resize(1000, 1000)
没有发挥作用,因为窗口已被限定最大为500, 500。
在PyQt中,QWidget类提供了一些用于内容边距操作的方法。下面是这些方法的介绍:
setContentsMargins(left, top, right, bottom)方法:
getContentsMargins()方法:
contentsRect()方法:
创建一个窗口,包含一个标签。
要求:标签内容为“我爱Python,我学PyQt”,标签大小为300, 300,并将内容放在标签的右下角。
from PyQt5.QtWidgets import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("内容边距的设置")
window.resize(500, 500)
label = QLabel(window)
label.setText("我爱Python,我学PyQt")
label.resize(300, 300)
label.setStyleSheet("background-color: cyan;")
# 设置内容边距
label.setContentsMargins(100, 200, 0, 0)
# 获取内容边距
print(label.getContentsMargins())
# 获取内容区域展示的范围
print(label.contentsRect())
window.show()
sys.exit(app.exec_())
运行结果: