我有一个带有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)")
这样的东西发射吗?但当?如何仅在单击选项卡时让计算机理解我想要这种行为?
我是不是太复杂了?
我使用信号非常舒服,但看起来我不太习惯创建它们:)如果我不够清楚,请询问更多细节。
提前多多感谢!
答案 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?"