qslider 悬浮显示 鼠标所在刻度值
时间: 2023-06-17 16:07:39 浏览: 145
【Qt】自定义QSlider
5星 · 资源好评率100%
你可以使用 QSlider 的 valueChanged 信号来获取当前的值,并将其转换为字符串显示在 QWidget 上。具体实现步骤如下:
1. 创建一个 QWidget,用于显示当前鼠标所在的刻度值。
2. 连接 QSlider 的 valueChanged 信号到一个槽函数中,该槽函数用于更新 QWidget 上的显示内容。
3. 在槽函数中,获取当前 QSlider 的值,并将其转换为字符串。
4. 根据鼠标位置,计算出当前鼠标所在的刻度值,并将其显示在 QWidget 上。
以下是示例代码:
```python
from PyQt5.QtWidgets import QApplication, QWidget, QSlider, QHBoxLayout, QLabel
from PyQt5.QtGui import QFontMetrics
from PyQt5.QtCore import Qt, QRect
class Slider(QWidget):
def __init__(self):
super().__init__()
self.slider = QSlider(Qt.Horizontal)
self.label = QLabel(self)
layout = QHBoxLayout()
layout.addWidget(self.slider)
layout.addWidget(self.label)
self.setLayout(layout)
self.slider.setRange(0, 100)
self.slider.valueChanged.connect(self.update_label)
def update_label(self, value):
# 获取当前值并转换为字符串
value_str = str(value)
# 计算鼠标位置并获取对应的刻度值
mouse_pos = self.slider.mapFromGlobal(self.cursor().pos())
rect = self.slider.rect()
rect.setLeft(rect.left() + self.slider.style().pixelMetric(QSlider.SliderLength) / 2)
rect.setRight(rect.right() - self.slider.style().pixelMetric(QSlider.SliderLength) / 2)
range_len = self.slider.maximum() - self.slider.minimum()
pos = mouse_pos.x() - rect.left()
pos_per_unit = rect.width() / range_len
mouse_value = int(pos / pos_per_unit)
# 更新显示内容
self.label.setText(f"Value: {value_str}, Mouse Value: {mouse_value}")
# 调整显示位置
font_metrics = QFontMetrics(self.label.font())
label_width = font_metrics.width(self.label.text())
label_height = font_metrics.height()
label_rect = QRect(mouse_pos.x() - label_width / 2, self.slider.height(),
label_width, label_height)
self.label.setGeometry(label_rect)
if __name__ == '__main__':
app = QApplication([])
slider = Slider()
slider.show()
app.exec_()
```
运行代码后,拖动滑块并移动鼠标,即可在 QWidget 上看到当前鼠标所在的刻度值。
阅读全文