Reputation: 147
I have a UI with a QTabWidget whose last tab allows the user to add a new tab, as in Firefox :
But I can't quite get the behaviour that I need. For now, I have used the signal currentChanged(int)
, but as its name states, if the user clicks 2 times on that '+' tab, it will emit the signal only the first time. I want my homemade addTab
method to be launched every time the '+' tab is clicked, not only when the current tab has been changed.
So I was thinking about creating a subclass of QTableWidget to add a homemade signal, named for example tabClicked
. But I can't understand when the signal is emitted. This is what I have so far :
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!"
Should I emit, with something like self.emit(SIGNAL("tabClicked(int)")
? But when? How do I make the computer understand that I want this behaviour only when a tab is clicked?
Am I overcomplicating things?
I am very comfortable using signals but it looks like I'm not quite as comfortable creating them :) Please ask for more details if I'm not being clear enough.
Thanks a lot in advance!
Upvotes: 2
Views: 987
Reputation: 5793
I would suggest that you add a QPushButton
like this:
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!"
Or you could emit signal like this:
def tabClicked(self):
print "tab clicked!"
some_intiger = 0
self.tabClicked.emit(some_intiger)
And than you should connect this emited signal to some new function in __init__()
def __init__():
self.tabClicked.connect(self.addTab)
def addTab():
# this function is executed ever time you emit signal from `self.tabClicked()`
print "addTab?"
Upvotes: 3