47-输入和显示- 仪表盘控件QDial

QDial是Qt库中的一个仪表盘控件,类似于QSlider,但呈现圆形。它用于在限定范围内控制值,常用于角度或环绕值的调整。QDial继承自QAbstractSlider,具备相同信号、插槽和属性。文章介绍了QDial的属性,如notchSize、notchTarget和wrapping,以及如何设置刻度、包裹行为和范围。示例代码展示了如何创建和使用QDial,包括信号和槽的连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仪表盘控件QDial

仪表盘控件 QDial与滑块控件 QSlider 类似,只不过是把滑槽由直线变成圆。仪表盘控件可以设置仪表盘上显示的刻度,最大值刻度和最小值刻度可以重合,也可以不重合。

QDial 继承自 QAbstractSlider,继承了QAbstractSlider 的方法和信号。

用QDial类创建仪表盘实例的方法如下所示其中参数parent是仪表盘控件所在的窗口或容器控件。

from PySide6.QtWidgets import QDial

QDial(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None)-> None

../../_images/windows-dial.png

当用户需要将一个值控制在程序可定义的范围内,并且该范围要么环绕例如,角度从0度到359度,要么对话框布局需要一个方形小部件时,就会使用QDial。

由于QDial继承自QAbstractSlider,因此表盘的行为方式与滑块类似。当wrappeng为false默认设置时,滑块和表盘之间没有真正的区别。它们共享相同的信号、插槽和成员功能。使用哪一个取决于用户的期望和应用程序的类型。
当滑块移动时,表盘最初会连续发出valueChanged信号;您可以通过禁用跟踪属性来减少它发出信号的频率。即使禁用了跟踪,sliderMoved信号也会连续发出。

当按下和释放鼠标按钮时,表盘还会发出sliderPressed和sliderReleased信号。请注意,由于键盘和滚轮也可以用于更改数值,因此表盘的数值可以在不发出这些信号的情况下更改。

与滑块不同,QDial尝试绘制"不错"数量的凹口,而不是每行一步。如果可能的话,每行步绘制一个凹口,但如果没有足够的像素来绘制每个凹口,QDial将跳过凹口,尝试绘制统一的集合例如,每隔第二个或第三个凹口绘制一个。
与滑块一样,刻度盘使QAbstractSlider函数setValue可用作插槽。

表盘的键盘界面相当简单:左/上/右/下箭头键通过定义的singleStep调整表盘的值,Page up和Page down通过定义的pageStep调整,Home和End键将值设置为定义的最小值和最大值。

如果使用鼠标滚轮调整刻度盘,则增量值由滚轮滚动线乘以singleStep和pageStep的较小值确定。

仪表盘控件QDial的属性

属性描述功能访问
notchSize: int此属性保持当前缺口大小。
陷波大小以范围控制为单位,而不是像素,并且计算为singleStep的倍数,这会导致屏幕上的陷波大小接近notchTarget。
notchSize ()
notchTarget: float此属性保持凹口之间的目标像素数。
陷波目标是QDial试图在每个陷波之间放置的像素数。
实际大小可能与目标大小不同。
默认的陷波目标是3.7像素。
notchTarget ()

setNotchTarget (target)
notchesVisible: bool此属性保留是否显示凹口。
如果属性为真,则在表盘周围绘制一系列凹口,以指示可用值的范围;否则没有示出凹口。
默认情况下,此属性处于禁用状态。
notchesVisible ()

setNotchesVisible (visible)
wrapping: bool此属性保留是否启用环绕。
如果为true,则启用包装;否则,在表盘底部插入一些空格,以分隔有效值范围的两端。
如果启用,箭头可以在表盘上以任何角度定向。如果禁用,箭头将限制在表盘的上部;如果它被旋转到表盘底部的空间中,它将被夹在有效值范围的最近端。
默认情况下,此属性为false。
wrapping ()

setWrapping (on)

仪表盘控件QDial的常用方法

仪表盘控件QDial的常用方法如表所示。

  • 用setnotchesVisible(visible:bool)方法设置刻度是否可见,
  • 用setnotchTarget(target: float)方法设置刻度之间的像素距离,
  • 用setWrapping(on:bool)方法设置最大值刻度和最小值刻度是否重合,
  • 用setRange(min:int,max;int)方法设置最小值刻度和最大值刻度所代表的值
  • 用setValue(int)方法设置滑块当前指向的值,
  • 用value()方法获取滑块的值。
QDial的方法及参数类型返回值的类型说 明
[slot]setnotchesVisible(visible:bool)None设置刻度是否可见
notchesVisible()bool获取刻度是否可见
setnotchTarget(target:float)None设置刻度之间的距离(像素)
notchTarget()float获取刻度之间的距离
[slot]setWrapping(on: bool)None设置最大刻度和最小刻度是否重合
wrapping()bool获取最大值和最小值刻度是否重合
notchSize()int获取相邻刻度之间的值
setRange(min: int,max: int)None设置刻度代表的最小值和最大值
setMaximum(int)None设置刻度代表的最大值
setMinimum(int)None设置刻度代表的最小值
setInvertedAppcarance(bool)None设置刻度反向
[slot]setValue(int)None设置滑块当前所在的位置
value()int获取滑块的值
setPageStep(int)None设置按PgUp键和PgDn键时滑块移动的 距离
setSingleStep(int)None设置按上下左右箭头键时滑块移动的距离
setTracking(enable: bool)None设置移动滑块时是否连续发送 valueChanged(int)信号

QDial控件的信号

QDial控件的信号与 QSlider 控件的信号相同

滚动条控件QScrollBar 和滑块控件 QSlider 的信号如表所示

  • 最常用的信号是valueChanged(value:int)

  • actionTriggered(action:int)信号在用户用鼠标或键盘键改变滑块位置时发送,根据改变方式的不同,信号的参数值也不同action 的值可以取以下值,对应的值分别是0~7,例如

    • 单击两端的箭头改变滑块位置,参数的值是1或2
    • 如果单击滑块的轨道改变滑块位置,参数的值是3或4
    • 如果拖动滑块参数的值是 7
    QAbstractSlider.SliderNoAction
    QAbstractSlider.SliderSingleStepAdd
    QAbstractSlider.SliderSingleStepSub
    QAbstractSlider.SliderPageStepAdd
    QAbstractSlider.SliderPageStepSub
    AbstractSlider.SliderToMinimum
    QAbstractSlider.SliderToMaximum
    QAbstractSlider.SliderMove
QScrollBar和QSlider的信号及参数类型说 明
valueChanged(value:int)当值发生变化时发送信号
rangeChanged(min:int,max: int)当最小值和最大值发生变化时发送信号
sliderMoved(value:int)当滑块移动时发送信号
sliderPressed()当按下滑块时发送信号
sliderReleased()当释放滑块时发送信号
actionTriggered(action:int)当用鼠标改变滑块位置时发送信号,参数 action根据改 变方式的不同也会不同

QDial 例子

image-20230319025631241

# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/15 0:48
# File_name: 03-QDial 例子.py


import sys
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *


class dialDemo(QWidget):
    def __init__(self,parent=None):
        super(dialDemo,self).__init__(parent)
        self.setWindowTitle("QDial 例子")
        self.resize(600,600)

        layout = QVBoxLayout()
        self.label = QLabel("Hello Qt for Python")
        self.label.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.label)

        # 普通qdial
        self.dial1 = QDial()
        self.dial1.setMinimum(10)
        self.dial1.setMaximum(50)
        self.dial1.setSingleStep(3)
        self.dial1.setPageStep(5)
        self.dial1.setValue(20)
        layout.addWidget(self.dial1)

        # 开启循环
        self.dial_wrap = QDial()
        self.dial_wrap.setMinimum(5)
        self.dial_wrap.setMaximum(25)
        self.dial_wrap.setSingleStep(1)
        self.dial_wrap.setPageStep(5)
        self.dial_wrap.setValue(15)
        self.dial_wrap.setWrapping(True)
        self.dial_wrap.setMinimumHeight(100)
        layout.addWidget(self.dial_wrap)

        # 连接信号槽
        self.dial1.valueChanged.connect(lambda: self.valuechange(self.dial1))
        self.dial_wrap.valueChanged.connect(lambda: self.valuechange(self.dial_wrap))

        self.setLayout(layout)

    def valuechange(self,dial):
        size = dial.value()
        self.label.setText('选中大小:%d'% size)
        self.label.setFont(QFont("Arial",size))


if __name__ =='__main__':
    app = QApplication(sys.argv)
    app.setWheelScrollLines(2)
    demo = dialDemo()
    demo.show()
    sys.exit(app.exec())

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值