PyQt5 - QTabWidget 内容是不是可以扩展到主窗口边缘,即使没有内容?

Posted

技术标签:

【中文标题】PyQt5 - QTabWidget 内容是不是可以扩展到主窗口边缘,即使没有内容?【英文标题】:PyQt5 - Can QTabWidget content extend up to Main Window edges, even with no content?PyQt5 - QTabWidget 内容是否可以扩展到主窗口边缘,即使没有内容? 【发布时间】:2016-02-15 00:38:36 【问题描述】:

我是 PyQt5 的新手...这里有一个简单的问题。

我正在使用 PyQt5 构建一个简单的应用程序。这个应用程序有一个主窗口,其中包含一个带有 3 个选项卡的 QTabWidget。一旦应用程序启动,所有标签页都是空的,稍后会被填充。当标签页为空时,我仍然希望它们显示为空白页并延伸到主窗口边缘。

我一直在尝试通过两种方式来实现这一点:使用布局和使用 setGeometry 函数。然而标签页永远不会垂直延伸很远,水平它们永远不会超出最后一个标签。请参阅下面的代码。

import sys
from PyQt5.QtWidgets import *


class MainWindow(QWidget):

    def __init__(self):

       super().__init__()

       self.setWindowTitle("Window With Tabs")
       self.setGeometry(50,50,400,400)

       oTabWidget = QTabWidget(self)

       oPage1 = QWidget()
       oLabel1 = QLabel("Hello",self) 
       oVBox1 = QVBoxLayout() 
       oVBox1.addWidget(oLabel1)      
       oPage1.setLayout(oVBox1)

       oPage2 = QWidget()
       oPage2.setGeometry(0,0,400,400)

       oPage3 = QWidget()
       oPage3.setGeometry(0,0,400,400)              

       oTabWidget.addTab(oPage1,"Page1")
       oTabWidget.addTab(oPage2,"Page2")
       oTabWidget.addTab(oPage3,"Page3")      

       self.show()


if __name__ == "__main__":

    app = QApplication(sys.argv)

    oMainwindow = MainWindow()

    sys.exit(app.exec_())

知道如何修改代码以使空白页面延伸到主窗口的边缘吗?

【问题讨论】:

【参考方案1】:

在主窗口小部件上设置布局:

class MainWindow(QWidget):
    def __init__(self):   
        super().__init__()

        self.setWindowTitle("Window With Tabs")
        self.setGeometry(50,50,400,400)

        layout = QVBoxLayout(self)

        oTabWidget = QTabWidget(self)
        layout.addWidget(oTabWidget)

对其他小部件的setGeometry 调用是多余的。

【讨论】:

【参考方案2】:
import sys
from PyQt5.QtWidgets import *


class MainWindow(QWidget):
    # window object
    def __init__(self):
       super().__init__()
       self.initGUI() # call custom code

    def initGUI(self):   
       self.setWindowTitle("Window With Tabs") # window...
       self.setGeometry(50,50,400,400)         #...properties   
       TabW=self.createTabs()                  # a custom-tab object
       layout = QVBoxLayout(self)              # main window layout   
       layout.addWidget(TabW)                  #populate layout with Tab object
       self.show()                             # display window   

    def createTabs(self):            # create and return Tab object
       oPage1 = QWidget()            # tabs...
       oPage2 = QWidget()
       oPage3 = QWidget()

       oTabWidget = QTabWidget()    # Tabobject

       oTabWidget.addTab(oPage1,"Page1") # populate tab object...
       oTabWidget.addTab(oPage2,"Page2")
       oTabWidget.addTab(oPage3,"Page3") 

       return   oTabWidget              # return tab object  

if __name__ == "__main__":             # Rest is History!

    app = QApplication(sys.argv)
    oMainwindow = MainWindow()
    sys.exit(app.exec_())

【讨论】:

以上是关于PyQt5 - QTabWidget 内容是不是可以扩展到主窗口边缘,即使没有内容?的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 组件之QTabWidget

如何仅隐藏 QTabWidget 栏 PyQt5 [关闭]

PyQt5 QTabWidget 显示 currentWidget() "NoneType"

PyQt5 动态将 QFormLayouts 添加到 QTabWidget 的选项卡中

PyQt5 QTabWidget:如何在类和同一窗口中包含的选项卡之间切换?

PYQT5 中的布局大小