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?"
我有一个带有 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?"