《快速掌握PyQt5》 第九章 滑动条QSlider和表盘QDial

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/La_vie_est_belle/article/details/82533432

第九章 滑动条QSlider和旋钮QDial

9.1 QSlider

9.2 QDial

9.3 小结


9.1 QSlider

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QApplication, QWidget, QSlider, QLabel, QVBoxLayout, QHBoxLayout


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        self.slider_1 = QSlider(Qt.Horizontal, self)                                       # 1
        self.slider_1.setRange(0, 100)                                                     # 2
        self.slider_1.valueChanged.connect(lambda: self.on_change_func(self.slider_1))     # 3

        self.slider_2 = QSlider(Qt.Vertical, self)
        self.slider_2.setMinimum(0)                                                        # 4
        self.slider_2.setMaximum(100)                                                      # 5
        self.slider_2.valueChanged.connect(lambda: self.on_change_func(self.slider_2))

        self.label = QLabel('0', self)                                                     # 6
        self.label.setFont(QFont('Arial Black', 20))

        self.h_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()

        self.h_layout.addWidget(self.slider_2)
        self.h_layout.addStretch(1)
        self.h_layout.addWidget(self.label)
        self.h_layout.addStretch(1)

        self.v_layout.addWidget(self.slider_1)
        self.v_layout.addLayout(self.h_layout)
        
        self.setLayout(self.v_layout)

    def on_change_func(self, slider):                                                       # 7
        if slider == self.slider_1:
            self.slider_2.setValue(self.slider_1.value())
            self.label.setText(str(self.slider_1.value()))
        else:
            self.slider_1.setValue(self.slider_2.value())
            self.label.setText(str(self.slider_2.value()))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

1. 通过传入Qt.Hrizontal可以实例化一个水平的滑动条,传入Qt.Vertical的话可以实例化一个垂直的滑动条;

2. 通过setRange()方法可以设置滑动条的范围;

3. 当滑动时,数值发生改变,触发valueChanged信号;

4-5. 除了setRange()方法,还可以使用setMinimum()和setMaximum()方法来设置最小值和最大值;

6. 这里实例化的QLabel是为了显示出QSlider当前的数值;

7. 在自定义的槽函数中,将两个滑动条的数值同步,然后用QLabel显示出当前数值。

运行截图如下,不管移动哪个滑动条,另一个滑动条的数值会同步,QLabel也会显示出相应的数值:

9.2 QDial

import sys
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QApplication, QWidget, QDial, QLabel, QHBoxLayout


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        self.setWindowTitle('QDial')                            # 1

        self.dial = QDial(self)
        self.dial.setFixedSize(100, 100)                        # 2
        self.dial.setRange(0, 100)                              # 3
        self.dial.setNotchesVisible(True)                       # 4
        self.dial.valueChanged.connect(self.on_change_func)     # 5

        self.label = QLabel('0', self)
        self.label.setFont(QFont('Arial Black', 20))

        self.h_layout = QHBoxLayout()
        self.h_layout.addWidget(self.dial)
        self.h_layout.addWidget(self.label)

        self.setLayout(self.h_layout)

    def on_change_func(self):
        self.label.setText(str(self.dial.value()))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

1. setWindowTitle()方法可以设置窗口标题;

2. 实例化一个QDial控件后,通过setFixedSize()方法来固定QDial的大小。 如果不设置该方法的话,我们会发现在改变表盘数值时,表盘的大小会发生改变;

3. 使用setRange()方法来设置表盘数值范围,当然也可以使用setMinimum()和setMaximum()方法;

4. setNotchesVisible(True)可以显示刻度,刻度会根据我们设置的数值自动调整;

5. 当改变表盘数值时,会触发valueChanged信号,在槽函数中我们让QLabel显示出当前表盘数值。

运行截图如下:

9.3 小结

1. 可以看出QSlider和QDial用法都差不多;

2. Qt.QHorizontal和Qt.Vertical分别用来实现水平的滑动条和垂直的滑动条;

3. setWindowTitle()可以设置窗口标题,setFixedSize()可以固定窗口或控件大小。

----------------------------------------------------------------------

喜欢的小伙伴可以加入这个Python QQ交流群一起学习:820934083

猜你喜欢

转载自blog.csdn.net/La_vie_est_belle/article/details/82533432
今日推荐