1、QSlider功能作用和信号
刻度控制:在控件的周边显示一些刻度线展示给用户看,类似于温度计所展示的效果。
设置刻度线所展示的位置:settTickPosition()。
设置刻度线密度。
sd.setPageStep(5):不仅调整刻度,也会影响页的步长(pagedown和pageup)
每隔五个绘制一个 sd.setTickInterval(5):仅调整刻度,并非控制页的步长。
#sd.setPageStep(5)
# 每隔五个绘制一个
sd.setTickInterval(5)
2、QSlider---拓展案例:
在滑块移动时,通过标签展示滑块当前的数值,并要求标签位置一直在滑块所在位置中间。
滑块移动时值改变,展示当前数据;滑块与标签位置需要保持一直(需要计算滑块位置)。
x的位置需要计算,y的位置与滑块保持一致即可;值的比例和高度比例应该相等。(y位置需要求解的是一个像素),高度像素和整个控件的比例。
方法1:自定义控件类别,子类化控件,在他的内部监听鼠标的点击和移动。
坐标计算:(控件需要移动的距离是红色部分)
from PyQt5.Qt import *
# # 为了兼容引入如下参数
class Slider(QSlider):
def __init__(self, parent=None, *args, **kwargs):
super().__init__(parent=None, *args, **kwargs)
self.setTickPosition(QSlider.TicksBothSides)
self.setup_ui()
# 添加子控件方法
def setup_ui(self):
self.label = QLabel(self)
self.label.setText("0")
self.label.setStyleSheet("color:red")
# 隐藏标签,一开始隐藏标签
self.label.hide()
# 监听鼠标按下事件
def mousePressEvent(self, evt):
super().mousePressEvent(evt)
x = (self.width() - self.label.width()) / 2
y = ((1 - self.value() / (self.maximum() - self.minimum())) * (self.height() - self.label.height()))
# 点击鼠标之后显示标签
self.label.show()
self.label.move(x, y)
# 鼠标移动方法
def mouseMoveEvent(self, evt):
super().mouseMoveEvent(evt)
x = (self.width() - self.label.width()) / 2
y = (1 - self.value() / (self.maximum() - self.minimum()) * self.height() - self.height())
self.label.show()
self.label.move(x, y)
# 改变标签内部的数值
self.label.setText(str(self.value()))
self.label.adjustSize()
# 监听鼠标释放方法
# def mouseReleaseEvent(self, evt):
# super().mouseReleaseEvent(evt)
# #self.label.hide()
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QSlider的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
# 控件1
slider = Slider()
slider.setParent(self)
slider.move(200, 200)
slider.resize(30, 200)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
window.show()
sys.exit(app.exec_())
3、QScrollBar()功能作用:用于显示比他的窗口小部件更大的物体,很少单独使用。
空白区域即页面控件。
监听滚动条值的变化,根据变化值做相关处理就可以了。(监听用户拖拽滚动条应该怎么做)
控件的尺寸需要手动调整。
可滚动区域:最大值-最小值;
控件宽度:可滚动区域+Page Step(滑块的宽度)
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QScrollBar的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
sb = QScrollBar(self)
# 这个控件需要手动调整大小
sb.resize(30, 200)
sb.move(100, 100)
sb2 = QScrollBar(Qt.Horizontal, self)
sb2.resize(200, 30)
sb2.move(100, 100)
sb.valueChanged.connect(lambda val: print(val))
# 滑块高度变高
sb.setPageStep(50)
# 捕获当前键盘
sb.grabKeyboard()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
window.show()
sys.exit(app.exec_())
调节滑块的宽和高可以根据page step修改。
通过page up控制控件高度。