【问题标题】:In PyQt, how can signals and slots be used to connect a dropdownlist to a function?在 PyQt 中,如何使用信号和插槽将下拉列表连接到函数?
【发布时间】:2010-01-31 21:37:07
【问题描述】:

在 PyQt 中,有一个信号和槽的概念,用于将对象连接到彼此的函数,但我似乎找不到它们引用与其他对象无关的函数。例如,我想要一个下拉列表来运行算法 A 或算法 B。

PyQt 是如何实现这个功能的?

【问题讨论】:

  • 我不确定你在问什么,是否可以使用常规 Python 函数作为信号回调?
  • 也许信号和插槽不是我想要的?我正在寻找将函数连接到下拉列表

标签: python user-interface pyqt


【解决方案1】:

想要改变下拉列表调用函数的效果吗?

将下拉列表的适当信号连接到您的函数。

例如使用QComboBox currentIndexChanged() 信号。将其连接到决定(基于索引)调用哪个函数的“包装器”函数。

编辑:包装器可以非常简单,如下所示:

functions = {0: reference_to_function_1, 1: reference_to_function_2}

def wrapper(index):
    functions[index]()

Edit2:如果您想要一些连接插槽的替代方法:

http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#connecting-signals-and-slots

注意他们何时谈论 Py 或 Qt 信号,何时谈论 Python 函数或方法。例如,这些是将 Qt 信号连接到 Python 函数和 Python 方法的语法:

QtCore.QObject.connect(a, QtCore.SIGNAL("QtSig()"), pyFunction) #function-style
QtCore.QObject.connect(a, QtCore.SIGNAL("QtSig()"), pyClass.pyMethod) #method-style

【讨论】:

  • 对。这就是我要问的。为什么我需要一个包装函数呢?这就是我觉得奇怪的地方。
  • 因为信号受到它们发送的参数的限制。您需要调用的函数根据参数进行更改(即单击下拉菜单中的哪个元素)。由于 QComboBox 不存储函数引用(它存储带有整数索引的 QStrings),它不能将函数引用作为参数发送。
  • 非常酷!非常感谢。所以我可以以与此类似的方式连接到这个随机类? button.connect(button, QtCore.SIGNAL("clicked()"),app, QtCore.SLOT("completelyUnrelatedFunction()")) 那个函数的槽在哪里?
  • 我想是这样,但您现在使用的是按钮而不是组合框?
  • 对。只是举个例子。可能应该使用组合框来询问参数是如何传递的,哈哈
猜你喜欢
  • 2010-10-30
  • 2018-09-23
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多