PyQt4:如何/何时从 QTabWidget 的子类发出自定义信号?
Posted
技术标签:
【中文标题】PyQt4:如何/何时从 QTabWidget 的子类发出自定义信号?【英文标题】:PyQt4: How/when to emit custom signal from subclass of QTabWidget? 【发布时间】:2015-06-30 09:51:51 【问题描述】:我有一个带有 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)")
的东西吗?但当?如何让计算机明白我只在单击选项卡时才需要这种行为?
我是不是把事情复杂化了?
我很习惯使用信号,但我似乎不太习惯创建它们 :) 如果我不够清楚,请询问更多详细信息。
提前非常感谢!
【问题讨论】:
How can I add a "new tab" button next to the tabs of a QMdiArea in tabbed view mode? 的可能重复项 是的,确实是重复的。感谢您点此页面,我之前无法自己找到它:) 【参考方案1】:我建议您像这样添加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?"
【讨论】:
QPushButton 是这样的:) 非常感谢。我接受这个答案!对于阅读本文的任何人,请参阅关于我原来问题的重复项的评论,以获取有关将按钮移动到正确位置的更多提示。以上是关于PyQt4:如何/何时从 QTabWidget 的子类发出自定义信号?的主要内容,如果未能解决你的问题,请参考以下文章
PyQt4:如何分别为QTabWidget中的每个选项卡着色?
PyQt4 菜单操作以将新选项卡添加到 QTabWidget
PyQt4 QTabWidget TAB CHANGE....currentChange(int) 不起作用