Python版本3.7
PySide2 Version: 5.14.1
官方文档:http://doc.qt.io/qtforpython/index.html
利用已有的widget来组合成一个新的widget来进行复用。
from PySide2.QtWidgets import QLCDNumber, QSlider, QWidget, QVBoxLayout, QApplication, QGridLayout
from PySide2.QtCore import Qt
class MyLCDNumber(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.lcd_number = QLCDNumber()
# 初始化一个水平的slider,默认是垂直的
self.slider = QSlider(Qt.Horizontal)
# 垂直布局
self.layout = QVBoxLayout()
self.layout.addWidget(self.lcd_number)
self.layout.addWidget(self.slider)
self.setLayout(self.layout)
# 设置整个控件的固定大小
self.setFixedSize(120, 100)
# 设置最多显示两位数
self.lcd_number.setDigitCount(2)
# 设置可以调节的范围大小
self.slider.setRange(0, 99)
# 信号与槽的连接
self.slider.valueChanged.connect(self.lcd_number.display)
app = QApplication()
window = QWidget()
# 网格布局
layout = QGridLayout()
mylcdnumber01 = MyLCDNumber()
mylcdnumber02 = MyLCDNumber()
mylcdnumber03 = MyLCDNumber()
mylcdnumber04 = MyLCDNumber()
layout.addWidget(mylcdnumber01, 1, 1)
layout.addWidget(mylcdnumber02, 1, 2)
layout.addWidget(mylcdnumber03, 2, 1)
layout.addWidget(mylcdnumber04, 2, 2)
window.setLayout(layout)
window.show()
app.exec_()
运行截图:
自定义一个widget,首先需要继承QWidget
这个类,然后在构造方法里面调用父类的构造方法,之后就可以自己定义一些需要组合的控件了。这里还没有完善,一般情况下还需要将对外提供一些信号和槽,因为此时MyLCDNumber
就是一个整体的控件了,应该要向外提供内部控件的操作,封装操作内部控件的细节。