PyQt4:How/when 从 QTabWidget 的子类发出自定义信号?

PyQt4: How/when to emit custom signal from subclass of QTabWidget?

我有一个带有 QTabWidget 的 UI,它的最后一个选项卡允许用户添加一个新选项卡,就像在 Firefox 中一样:

但我无法完全获得所需的行为。现在,我使用了信号 currentChanged(int),但正如其名称所述,如果用户在该“+”选项卡上单击 2 次,它只会在第一次发出信号。我希望我的自制 addTab 方法在每次单击“+”选项卡时启动,而不仅仅是在当前选项卡已更改时启动。

所以我在考虑创建一个 QTableWidget 的子类来添加一个自制信号,例如命名为 tabClicked。但我无法理解信号何时发出。这是我目前所拥有的:

from PyQt4 import QtGui
from PyQt4.QtCore import pyqtSignal

class QTableWidgetClickable(QtGui.QTabWidget):
    tabClicked = pyqtSignal(int)

    def __init__(self, parent=None):
        super(QTableWidgetClickable, self).__init__(parent)

    def tabClicked(self):
        print "tab clicked!"

我应该用 self.emit(SIGNAL("tabClicked(int)") 之类的东西发出吗?但当?如何让计算机理解我只在单击选项卡时才需要此行为? 我是不是把事情复杂化了?

我很喜欢使用信号,但看起来我不太喜欢创建它们 :) 如果我不够清楚,请询问更多细节。

非常感谢!

我建议您像这样添加 QPushButton

class QTableWidgetClickable(QtGui.QTabWidget):
    tabClicked = pyqtSignal(int)

    def __init__(self, parent=None):
        super(QTableWidgetClickable, self).__init__(parent)

        # add qpushbutton
        self.addButton = QtGui.QPushButton()

        # connect a signal
        self.addButton.clicked.connect(self.tabClicked)

    def tabClicked(self):
        print "tab clicked!"

或者你可以这样发出信号:

def tabClicked(self):
    print "tab clicked!"
    some_intiger = 0
    self.tabClicked.emit(some_intiger)

然后你应该将这个发出的信号连接到 __init__()

中的某个新函数
def __init__():
    self.tabClicked.connect(self.addTab)

def addTab():
    # this function is executed ever time you emit signal from `self.tabClicked()`
    print "addTab?"