【发布时间】:2018-07-16 09:22:52
【问题描述】:
我有一个带有三个选项卡的 GUI(用 PyQt 编写),每个选项卡都有一个 QtGui.QMainWindow 类。整个 GUI 由 .ui 文件定义。这似乎是人们希望隐藏 QMainWindow 对象的 SO(下一段中的链接)上的类似问题之间的主要区别。更具体地说,我试图隐藏一个 QMainWindow 对象,它是 Gui 元素的一部分(不是整个)。
主窗口及其选项卡如下所示:
根据我的配置文件中的设置,我想让 TEST 可见,或者对用户隐藏它。我检查了PyQT Docs(即removeDockWidget()?)和两个类似的SO查询(Link One和link Two),还有一个建议layouts/setVisible的SO问题。
但我做不到。如果我使用.hide() 或.setVisible(False),那么似乎什么都没有改变。如果我设置.setVisible(True),那么在启动时会出现一个额外的微型窗口,其中包含我的主类的名称。
我的代码结构是:
我的入口/主类:
class Gui:
def __init__(self):
# Create the main window GUI and show it
self.mainWindow= GuiMainWindow(self)
self.mainWindow.show()
<...>
def main():
app = QtGui.QApplication(sys.argv)
myGui = Gui(app)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
GuiMainWindow 包含三个选项卡:
class GuiMainWindow(QtGui.QMainWindow):
def __init__(self, appMain):
QtGui.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Create helper objects to manage main window tabs
self.daqTab = GuiMainDaqTab(appMain, self)
self.pwrTab = GuiMainPowerTab(appMain, self)
self.testTab = GuiMainTestTab(appMain, self)
self.testTab.hideMe()
最后,TEST 选项卡是我想要隐藏/显示的:
class GuiMainTestTab(QtGui.QMainWindow):
def __init__(self, appMain, mainWindow):
super(GuiMainTestTab, self).__init__()
self.appMain = appMain
self.mainWindow = mainWindow
self.ui = mainWindow.ui
<...>
def hideMe(self):
self.close()
# self.hide() # Also tried hide()
# self.setVisible(False) # ..Or setVisible()
--- 编辑以帮助回答/我的比赛评论在下面回答---
因此,GuiMainTestTab 类通过其成员 self.ui 访问 ui 文件的内容。挖掘 ui 文件,我发现 testTab 是它在 ui 文件中的 Test 选项卡的名称(与 GuiMainWindow..! 中的 testTab 相对)。它附加到一个名为verticalTabWidget 的QTabWidget。因此,以编程方式查找测试选项卡的索引,并将其删除:
testIdx = self.ui.verticalTabWidget.indexOf(self.ui.testTab)
self.ui.verticalTabWidget.removeTab(testIdx)
【问题讨论】:
-
请阅读有关如何提供minimal reproducible example 的指南。