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) 不起作用

pyQt4 QTabWidget setMovable 使用自定义 QTabBar 崩溃

如何识别 QTabWidget 中当前选项卡何时发生变化?

pyqt4 怎么样从文件提取内容填充到表格中?