单击QDockWidget选项卡时通知?

2024-05-15 14:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在用户单击选项卡化的QDockWidget的选项卡时执行一段代码。到目前为止,我一直是通过使用“visibilityChanged”事件来实现这一点的,但这现在导致了一些问题(例如,如果我有多个tabbified dock widget,我把其中一个拖出来让它浮动,下面的tabbified一个将触发它的“visibilityChanged”事件,我将错误地解释为用户单击选项卡)。当用户点击QDockWidgets的标签时,我怎样才能收到正确的通知?我曾尝试过QDockWidget的“focusInEvent”,但当点击选项卡时,它似乎不会启动。在


Tags: 代码用户错误事件标签widget选项卡dock
1条回答
网友
1楼 · 发布于 2024-05-15 14:46:09

当您使用tabifyDockWidget()方法QMainWindow创建一个QTabBar,这不是直接访问的,但是使用findChild()你可以得到它,然后使用tabBarClicked信号

from PyQt4 import QtCore, QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        first_dock = None

        for i in range(10):
            dock = QtGui.QDockWidget("title {}".format(i), self)
            dock.setWidget(QtGui.QTextEdit()) # testing
            self.addDockWidget(QtCore.Qt.TopDockWidgetArea, dock)
            if first_dock:
                self.tabifyDockWidget(first_dock, dock)
            else:
                first_dock = dock
                dock.raise_()

        tabbar = self.findChild(QtGui.QTabBar, "")
        tabbar.tabBarClicked.connect(self.onTabBarClicked)

    def onTabBarClicked(self, index):
        tabbar = self.sender()
        text = tabbar.tabText(index)
        print("index={}, text={}".format(index, text))

if __name__ == '__main__':
    import sys

    app = QtGui.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

相关问题 更多 >