0

所以我使用 Pyqt 使用 Python 编程语言创建 GUI 程序。我试图在点击它时获得 Qslider 的价值,但我不明白如何......

self.slide.mouseDoubleClickEvent= lambda event: self.slideclicked()

这就是我在单击幻灯片时声明方法的方式,这就是方法:

    def slideclicked(self):
      print(self.slide.value())

我希望得到鼠标点击的值,但我只是得到 Qslider 的当前值。

4

1 回答 1

2

一种可能的解决方案是覆盖该mouseDoubleClickEvent方法并创建一个发送该信息的信号:

class Slider(QSlider):
    pointClicked = pyqtSignal(QPoint)
    def mouseDoubleClickEvent(self, event):
        self.pointClicked.emit(event.pos())

class Widget(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)
        self.setLayout(QVBoxLayout())
        self.slider = Slider()
        self.layout().addWidget(self.slider)
        self.slider.pointClicked.connect(lambda p: print(p.x(), p.y()))

如果您不能覆盖该方法,您可以使用eventFilter

class ClickedHelper(QObject):
    pointClicked = pyqtSignal(QPoint)
    def __init__(self, widget, *args, **kwargs):
        QObject.__init__(self, parent=widget)
        self.obj = widget
        self.obj.installEventFilter(self)

    def eventFilter(self, obj, event):
        if obj == self.obj and event.type() == QEvent.MouseButtonDblClick:
                self.pointClicked.emit(event.pos())
        return QObject.eventFilter(self, obj, event)

class Widget(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)
        self.setLayout(QVBoxLayout())
        self.slider = QSlider()
        self.layout().addWidget(self.slider)
        helper = ClickedHelper(self.slider)
        helper.pointClicked.connect(lambda p: print(p.x(), p.y()))
于 2018-01-15T17:14:24.333 回答