【问题标题】:PySide/PyQt : Detecting QPushButton state?PySide/PyQt:检测 QPushButton 状态?
【发布时间】:2018-06-16 16:27:54
【问题描述】:

我正在使用 ffmpeg 在 pyside 中实现一个电影播放器​​。将帧发送到 QImage 缓冲区一切正常,我可以使用 python timer() 函数停止和启动 OK 来控制播放速率,除非我不知道如何暂停。 即暂停按钮是一个两态按钮,根据连续点击时按钮的状态,播放或暂停。

我设置了按钮:

    self.pauseButton = QToolButton()
    self.pauseButton.setCheckable(True)

然后,我认为 isDown() 方法将确定按钮是处于向上还是向下状态,然后向我在其他地方定义的 timer() 函数发送信号。停止和播放按钮可以启动和停止计时器和图像流,但此暂停功能仅暂停:

    if self.pauseButton.isDown():
        self.pauseButton.clicked.connect(lambda: self.timer.start()))
    else:
        self.pauseButton.clicked.connect(lambda: self.timer.stop())

我哪里错了? PySide 可以检测 QPushButton 状态还是我需要使用按钮计数器方法或类似方法实现单独的事件过滤器?

干杯!

【问题讨论】:

    标签: video timer pyqt5 pyside qpushbutton


    【解决方案1】:

    要获取按钮状态,请使用self.pauseButton.isChecked()。要获得我认为您正在寻找的功能,您需要在按钮连接到的方法中检查按钮状态。

        self.pauseButton.clicked.connect(self.button_assignment)
    
    def button_assignment(self):
        if self.pauseButton.isChecked():
            self.timer.start()
        else:
            self.timer.stop()
    

    您的代码的编写方式,即按钮在初始化时所处的状态是单击信号将连接到的状态。 此外,您在单击的连接中拥有的 lambda 语句不是必需的。只需从函数调用中删除括号即可。 self.pauseButton.clicked.connect(self.timer.stop)

    【讨论】:

    • 在示例的上下文中?我尝试在 isChecked(True) 和 isChecked(False) 之间切换,但我得到了相同的行为。即,我没有暂停/恢复行为,只是暂停(停止)行为。我错过了什么?
    • 我认为我的解决方案只是问题的一部分。我已经编辑了我的答案来解决剩下的问题。
    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多