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

第九章 滑动条QSlider和旋钮QDial

9.1 QSlider

9.2 QDial

9.3 小结


《快速掌握PyQt5》专栏已整理成书出版,书名为《PyQt编程快速上手》,详情请见该链接。感谢大家一直以来的支持!祝大家PyQt用得越来越顺!

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()可以固定窗口或控件大小。

欢迎关注我的微信公众号,发现更多有趣内容:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

la_vie_est_belle

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值