在 QTabWidget (PyQT) 中添加已删除的选项卡

Posted

技术标签:

【中文标题】在 QTabWidget (PyQT) 中添加已删除的选项卡【英文标题】:Adding removed tabs in QTabWidget (PyQT) 【发布时间】:2011-11-28 16:01:08 【问题描述】:

我遇到了 pyQT 的问题。 所以我用设计器创建了一个图形界面,包含一个 QTabWidget。 事情是我想在我的功能运行时隐藏和显示选项卡。我找到了一种解决方案,其中包括删除所有选项卡并稍后添加它们。 假设我只有两个标签:

removedTab = self._application.getAlgorithmGUI().getWidget('tabWidget_Verification').widget(1)
self._application.getAlgorithmGUI().getWidget( 'tabWidget_Verification' ).removeTab( 1 )

当我稍后尝试添加这个已删除的选项卡时,我的程序崩溃了。

self._application.getAlgorithmGUI().getWidget( 'tabWidget_Verification' ).addTab(removedTab,QString.fromUtf8("TabRemoved"))

这是我的错误信息:

QCoreApplication::sendPostedEvents: Cannot send posted events for objects in another thread
QCoreApplication::sendPostedEvents: Cannot send posted events for objects in another thread
QCoreApplication::sendPostedEvents: Cannot send posted events for objects in another thread
QCoreApplication::sendPostedEvents: Cannot send posted events for objects in another thread
<unknown>: Fatal IO error 11 (Ressource temporairement non disponible) on X server :0.0.

有什么建议吗?

【问题讨论】:

其实还不够清楚。为什么要“删除所有选项卡并稍后添加”?为什么不声明所有需要的选项卡并在需要时调用它们并在不再需要它们时将它们从索引中删除? 首先我只是想隐藏一些标签并在我的功能的精确时刻显示它们。由于选项卡没有隐藏/显示方法,因此我找到了删除我在 .ui 中创建的选项卡的解决方案(不删除它们)。 【参考方案1】:

您可以在主窗口对象或您拥有的任何小部件中声明您需要的所有选项卡: 例如:

self.tab = QtGui.QWidget()
self.tab.setObjectName(_fromUtf8("tab"))

即使您尚未调用addTab() 方法,您也可以正常将小部件分配给您的选项卡。 例如:

self.lineEdit = QtGui.QLineEdit(self.tab)

必要时,您可以显示您的标签。 例如:

self.tabWidget.addTab(self.tab, "Label")

同样,您也可以从它的索引号中再次删除它。 例如:

self.tabWidget.removeTab(3)

可以根据需要多次调用同一个选项卡。 我认为这种方式非常干净和简单。 如果这不符合您的需求,请告诉我。

【讨论】:

好吧,我必须在 .ui 文件中单独构建我的小部件。这就是为什么我需要在运行函数之前创建所有选项卡的原因。无论如何,我尝试了您的解决方案,但收到此消息: QCoreApplication::sendPostedEvents:无法为另一个线程中的对象发送发布的事件 QCoreApplication::sendPostedEvents:无法为另一个线程中的对象发送发布的事件 QCoreApplication::sendPostedEvents:无法为另一个线程中的对象发送发布的事件QObject::setParent: 无法设置父级,新父级在不同的线程中 QCoreApplication::sendPostedEvents: 无法为另一个线程中的对象发送发布的事件 QCoreApplication::sendPostedEvents: 无法在另一个线程 中发送对象的发布事件:X 服务器:0.0 上的致命 IO 错误 11(资源临时不可分配)。我有点迷路了。 :// 如果您不断收到这些错误,则问题不在于您的标签。你在使用线程吗?我认为您必须将更多代码放在那里,以便我们看一下。我认为您的问题可能在于父小部件的分配。 关于线程你可能是对的,我得问问设计我编码环境的人。

以上是关于在 QTabWidget (PyQT) 中添加已删除的选项卡的主要内容,如果未能解决你的问题,请参考以下文章

PyQt4 菜单操作以将新选项卡添加到 QTabWidget

PyQt QTabWidget 多角小部件

PyQt4:如何/何时从 QTabWidget 的子类发出自定义信号?

PyQt5:QTabWidget中的可关闭选项卡?

PyQt5 组件之QTabWidget

qtabwidget切换tab如何修改