zoukankan      html  css  js  c++  java
  • PyQt5Day22--输入控件QAbstractSlider滑块(鼠标)

    一、QAbstractSlider

      包含了QSlider、QScrollBar、QDial三个子类。

    1、数值范围+当前数值

    (1)框架

     

    (2)操作及展示

     1 label = QLabel(self)
     2 label.setText("0")
     3 label.move(200, 200)
     4 label.resize(100, 30)
     5 
     6 sd = QSlider(self)
     7 sd.move(100, 100)
     8 # sd.valueChanged.connect(lambda val:label.setText(str(val)))
     9 
    10 # 设置最大值和最小值
    11 sd.setMaximum(100)
    12 sd.setMinimum(60)
    13 
    14 # 当前数值
    15 sd.setValue(88)  # 当前的数值为88
    16 sd.valueChanged.connect(lambda: label.setText(str(sd.value())))  # 获取当前数值

    2、步长+滑块位置

    (1)框架

     

    (2)操作及展示

    1 # 设置步长
    2 # sd.setSingleStep(5) # 键盘操作有效
    3 sd.setPageStep(8)  # 用pagedown和pageup操作
    4 
    5 # 是否追踪
    6 print(sd.hasTracking())  # 查看
    7 sd.setTracking(False)  # 显示与滑块拖动不同步

    3、滑块位置

    (1)框架

    (2)操作及展示

    1 # 滑块位置的设置
    2 sd.setSliderPosition(88)

    4、倒立外观+操作反转+滑块方向

    (1)框架

    (2)操作及展示

    1 sd.setInvertedAppearance(True) # 倒立外观
    2 sd.setInvertedControls(True) # 操作反转
    3 sd.setOrientation(Qt.Horizontal) # 水平滑块

    5、信号

    (1)框架

    (2)操作及展示

    1 # 信号
    2 # sd.sliderMoved.connect(lambda val:print(val))
    3 # sd.actionTriggered.connect(lambda val:print(val))
    4 sd.rangeChanged.connect(lambda min,max:print(min,max))
    5 
    6 sd.setMinimum(99)

    二、子类QSlider

    1、刻度控制

    (1)框架

    (2)操作及展示

     1 # *******************QSlider**********************开始
     2 from PyQt5.Qt import *
     3 
     4 class Window(QWidget):
     5     def __init__(self):
     6         super().__init__()
     7         self.setWindowTitle("QSlider")
     8         self.resize(500, 500)
     9         self.setup_ui()
    10 
    11     def setup_ui(self):
    12         sd = QSlider(self)
    13         sd.move(200,200)
    14         sd.resize(30,200)
    15         sd.setPageStep(5)
    16 
    17         # sd.setTickPosition(QSlider.TicksLeft) # 刻度线展示 左边
    18         # sd.setTickPosition(QSlider.TicksRight) # 刻度线展示 右边
    19         sd.setTickPosition(QSlider.TicksBothSides) # 刻度线展示 两边
    20 
    21         sd.valueChanged.connect(lambda val:print(val))
    22 
    23 if __name__ == '__main__':
    24     import sys
    25 
    26     app=QApplication(sys.argv)
    27 
    28     window=Window()
    29     window.show()
    30     sys.exit(app.exec_())
    31 # *******************QSlider**********************结束

    2、案例展示

     1 # *******************QSlider-案例**********************开始
     2 from PyQt5.Qt import *
     3 
     4 class Slider(QSlider):
     5     def __init__(self,parent=None,*args,**kwargs):
     6         super().__init__(parent, *args, **kwargs)
     7         self.setTickPosition(QSlider.TicksBothSides)
     8         self.setup_ui()
     9 
    10     def setup_ui(self):
    11         self.label = QLabel(self)
    12         self.label.setText("0")
    13         self.label.setStyleSheet("color:red")
    14         self.label.hide()
    15 
    16     def mousePressEvent(self, evt):
    17         super().mousePressEvent(evt) # 非常重要
    18         x = (self.width()-self.label.width())/2
    19         # y/height = (最大值-最小值-当前值)/(最大值-最小值)
    20         # y/height = 1-当前值/(最大值-最小值)
    21         # y = (1-当前值/(最大值-最小值)*height
    22         y = (1-self.value()/(self.maximum()-self.minimum()))*self.height()-self.label.height()
    23         self.label.show()
    24         self.label.move(x,y)
    25 
    26     def mouseMoveEvent(self, evt):
    27         super().mouseMoveEvent(evt)
    28 
    29         x = (self.width() - self.label.width()) / 2
    30         # y/height = (最大值-最小值-当前值)/(最大值-最小值)
    31         # y/height = 1-当前值/(最大值-最小值)
    32         # y = (1-当前值/(最大值-最小值)*height
    33         y = (1 - self.value() / (self.maximum() - self.minimum())) * (self.height() - self.label.height())
    34         self.label.show()
    35         self.label.move(x,y)
    36 
    37         self.label.setText(str(self.value()))
    38         self.label.adjustSize()
    39 
    40     def mouseReleaseEvent(self, evt):
    41         super().mouseReleaseEvent(evt)
    42         self.label.hide()
    43 
    44 
    45 class Window(QWidget):
    46     def __init__(self):
    47         super().__init__()
    48         self.setWindowTitle("QSlider")
    49         self.resize(500, 500)
    50         self.setup_ui()
    51 
    52     def setup_ui(self):
    53         # 1.创建两个控件
    54         slider = Slider(self)
    55         slider.move(200,200)
    56         slider.resize(30,200)
    57 
    58 
    59 if __name__ == '__main__':
    60     import sys
    61 
    62     app=QApplication(sys.argv)
    63 
    64     window=Window()
    65     window.show()
    66     sys.exit(app.exec_())
    67 # *******************QSlider-案例**********************结束
    QSlider综合案例

    三、子类QScrollBar

     1 # *******************QScrollBar**********************开始
     2 from PyQt5.Qt import *
     3 
     4 class Window(QWidget):
     5     def __init__(self):
     6         super().__init__()
     7         self.setWindowTitle("QScrollBar")
     8         self.resize(500, 500)
     9         self.setup_ui()
    10 
    11     def setup_ui(self):
    12         sb1 = QScrollBar(self) # 垂直滚动条
    13         sb1.resize(30,200)
    14         sb1.move(100,100)
    15 
    16         sb2 = QScrollBar(Qt.Horizontal,self) # 水平滚动条
    17         sb2.resize(300, 30)
    18         sb2.move(150, 100)
    19 
    20         sb1.valueChanged.connect(lambda val:print(val))
    21         sb1.setPageStep(50)
    22 
    23         sb1.grabKeyboard() # 捕捉键盘信号
    24 
    25 if __name__ == '__main__':
    26     import sys
    27 
    28     app=QApplication(sys.argv)
    29 
    30     window=Window()
    31     window.show()
    32     sys.exit(app.exec_())
    33 # *******************QScrollBar**********************结束

    四、子类QDial

     1 # *******************QDial**********************开始
     2 from PyQt5.Qt import *
     3 
     4 class Window(QWidget):
     5     def __init__(self):
     6         super().__init__()
     7         self.setWindowTitle("QDail")
     8         self.resize(500, 500)
     9         self.setup_ui()
    10 
    11     def setup_ui(self):
    12         dia = QDial(self)
    13         dia.setRange(0,200) # 设置范围
    14         dia.setNotchesVisible(True) # 显示刻度
    15         dia.setPageStep(5) # 大刻度控制
    16         dia.setWrapping(True) # 是否启用包裹(控件周围全是刻度)
    17         dia.setNotchTarget(10) # 控制刻度密度
    18 
    19         label = QLabel(self)
    20         label.move(200,100)
    21         label.setText("哈哈哈哈")
    22 
    23         def test(val):
    24             label.setStyleSheet("font-size:{0}px;".format(val))
    25             label.adjustSize()
    26 
    27         # dia.valueChanged.connect(lambda val:print("值发生了改变",val))
    28         dia.valueChanged.connect(test)
    29 
    30 if __name__ == '__main__':
    31     import sys
    32 
    33     app=QApplication(sys.argv)
    34 
    35     window=Window()
    36     window.show()
    37     sys.exit(app.exec_())
    38 # *******************QDial**********************结束
  • 相关阅读:
    学期总结
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言II—作业04
    C语言II—作业03
    C语言II—作业02
    C语言II博客作业01
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12738438.html
Copyright © 2011-2022 走看看