PyQt4:如何/何时从QTabWidget的子类发出自定义信号?

时间:2015-06-30 09:51:52

标签: python pyqt pyqt4

我有一个带有QTabWidget的UI,其最后一个标签允许用户添加新标签,如在Firefox中一样:

Illustration

但我无法得到我需要的行为。目前,我已经使用了信号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)")这样的东西发射吗?但当?如何仅在单击选项卡时让计算机理解我想要这种行为? 我是不是太复杂了?

我使用信号非常舒服,但看起来我不太习惯创建它们:)如果我不够清楚,请询问更多细节。

提前多多感谢!

1 个答案:

答案 0 :(得分:3)

我建议你像这样添加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?"