python - PySide(或 PyQt)信号和槽基础知识

标签 python pyqt signals-slots pyside

考虑一个像这样的简单示例,它使用信号和插槽链接两个 slider :

from PySide.QtCore import *
from PySide.QtGui import *
import sys

class MyMainWindow(QWidget):
 def __init__(self):
  QWidget.__init__(self, None)

  vbox = QVBoxLayout()

  sone = QSlider(Qt.Horizontal)
  vbox.addWidget(sone)

  stwo = QSlider(Qt.Horizontal)
  vbox.addWidget(stwo)

  sone.valueChanged.connect(stwo.setValue)

if __name__ == '__main__':
 app = QApplication(sys.argv)
 w = MyMainWindow()
 w.show()
 sys.exit(app.exec_())

您将如何更改它以使第二个 slider 向与第一个相反的方向移动? slider 1 将使用这些值进行初始化:

  sone.setRange(0,99)
  sone.setValue(0)

slider 二将使用这些值进行初始化:

  stwo.setRange(0,99)
  stwo.setValue(99)

然后 stwo 的值将是 99 - sone.sliderPosition

您将如何实现信号和槽以使其工作?如果有一个基于上述简单示例的工作示例,我将不胜感激。

最佳答案

你的例子有点破,因为你忘了设置布局的父级,也忘记了将 slider 小部件保存为成员属性以便稍后访问......但是要回答你的问题,它真的很简单将您的连接指向您自己的功能:

class MyMainWindow(QWidget):
    def __init__(self):
        QWidget.__init__(self, None)

        vbox = QVBoxLayout(self)

        self.sone = QSlider(Qt.Horizontal)
        self.sone.setRange(0,99)
        self.sone.setValue(0)
        vbox.addWidget(self.sone)

        self.stwo = QSlider(Qt.Horizontal)
        self.stwo.setRange(0,99)
        self.stwo.setValue(99)
        vbox.addWidget(self.stwo)

        self.sone.valueChanged.connect(self.sliderChanged)

    def sliderChanged(self, val):
        self.stwo.setValue(self.stwo.maximum() - val)

请注意 sliderChanged() 如何与原始 setValue() 插槽具有相同的签名。不是将一个小部件直接连接到另一个小部件,而是将它连接到自定义方法,然后将值转换为您想要的值,然后按照您的意愿操作(在 stwo 上设置自定义值)

关于python - PySide(或 PyQt)信号和槽基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10876621/

相关文章:

python - 每次单击按钮时移动标签 PyQt5

python - PyQt 获取ListWidget中的特定值

python - 使用python代码而不是html更改QLabel颜色?

c++ - Qt 设计器 : How to remove slot from designer?

c++ - 无法连接QT信号

c++ - Qt 信号和槽、线程、app.exec() 和相关查询

python - Spark : Change the Key of key value pair

python - 如何从 xml 或 tcx 文件中获取数据系列

python - 网络驱动程序的 Selenium 超时异常

python - 运行时更新 scrapy 蜘蛛