首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSlider和按键事件

QSlider和按键事件
EN

Stack Overflow用户
提问于 2012-11-27 06:32:15
回答 1查看 5.5K关注 0票数 2

我目前有一台QSlider,可以用鼠标滚动浏览图像数据帧。我希望能够使用箭头键滚动通过单个步骤(一个帧)。

这是我当前的sliderMoved代码:

代码语言:javascript
复制
def sliderMoved(self,val):
    """
    retrieves the data array for the index value specified by the slider
    """

    if self.fileheader is None:
        print "[DEBUG] change_image_index(): self.fileheader is None"
        return

    idx=val
    self.x=idx
    frame=self.fileheader.frameAtIndex(idx)
    image=scipy.ndimage.filters.maximum_filter(frame.data, size=5)

    self.image.setImage(image, scale=((10.28/512),(2.486/96)))
    print self.image.imageItem.pixelSize()

    def keyPressEvent(self, event):
        if event.key()==Qt.Key_Right:
            frame=self.fileheader.frameAtIndex(idx+1)

要将滑块连接到事件,我只需使用:

代码语言:javascript
复制
self.slider.sliderMoved.connect(self.sliderMoved)
self.slider.sliderMoved.connect(self.keyPressEvent)

箭头键移动滑块,但不会使图像跳过帧...我知道我漏掉了一些愚蠢的东西...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-27 17:50:25

尝试连接到滑块的valueChanged,而不是sliderMoved

代码语言:javascript
复制
import sys
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QApplication, QWidget, QSlider, QLabel, QVBoxLayout

class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.v_layout = QVBoxLayout()

        self.slider = QSlider()
        self.slider.setOrientation(Qt.Horizontal)
        self.label = QLabel('Slider at position 0')

        self.v_layout.addWidget(self.label)
        self.v_layout.addWidget(self.slider)

        self.setLayout(self.v_layout)

        self.slider.valueChanged.connect(self.slider_moved)

    def keyPressEvent(self, event):
        if event.key()==Qt.Key_Right:
            self.slider.setValue(self.slider.value() + 1)
        elif event.key()==Qt.Key_Left:
            self.slider.setValue(self.slider.value() - 1)
        else:
            QWidget.keyPressEvent(self, event)

    def slider_moved(self, position):
        self.label.setText('Slider at position %d' % position)


if __name__ == '__main__':
  app = QApplication(sys.argv)

  widget = Widget()
  widget.show()

  sys.exit(app.exec_())

在您的keyPressEvent中,您只需更改滑块的值,这将导致连接到valueChanged的所有函数运行。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13574302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档