pySide信号和插槽太多代码?

时间:2014-12-11 02:28:46

标签: python user-interface pyqt pyside signals-slots

我最近开始使用新的pySide信号和插槽,我发现我需要很多代码来处理它们。我想我做错了什么,希望有人有更好的方法。

#first I need to declare it at the class level
class UI(QtGui.QMainWindow):
    my_signal = QtCore.Signal(str, str)

# next I need to connect it to something in the UI
self.my_signal.connect(self._mySignalHandler)

# then I need the actual handler that does the work:
@QtCore.Slot(str, str)
def _mySignalHandler(self, a, b):
    pass

# and finally I needs an accessor method for it to use it from the outside the UI class:
def mySignalAccessor(self, a, b):
    self.my_signal.emit(a, b)

这是做很多简单事情的很多代码。我最终有两个方法和一个所有类似的变量 - 非常好的方式让你完全迷失在bug中。你有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

它只有三行代码:定义,连接,处理程序。访问器是冗余的(只需给信号一个好的描述性名称,并像任何其他内置信号一样使用它)。

你可以摆脱插槽装饰器,这通常不是必需的(信号可以连接到任何Python可调用,它不必是一个插槽)。

至于命名:只需选择一种格式,并在所有项目中坚持使用。例如:

    dataReceived = QtCore.Signal(object)

    self.dataReceived.connect(self.handleDataReceived)

    def handleDataReceived(self, data):

如果编辑器支持这种事情,可以通过模板轻松插入像这样的锅炉代码。

PS:

在PyQt中,支持Connecting Slots By Name - 我自己从未使用过它,我也不知道它是否也支持PySide,但你可能会发现它是有用的。