PyQt5无法创建Tabbars或Tabs

PyQt5 can't create Tabbars or Tabs

我一直在努力学习 PyQt5(和面向对象编程)。在我当前的脚本中,我需要创建一个选项卡式界面,但似乎无法管理它。我怀疑问题与OOP有关(我是新手)。 "self" 似乎是问题所在,我有点知道那是什么意思,但还不足以修复它。下面是我最近的尝试。似乎我正在使用脚本其他地方的 "wrong self"。我非常想了解面向对象的编程 - 提前感谢任何好心的人提供帮助!

部分 code/errors 是:

代码:

tabbar = QTabBar()  
tab1 = QTabWidget()  
tabbar.addTab(tab1, 'tab1')  

错误:

TypeError: arguments did not match any overloaded call:
addTab(self, str): argument 1 has unexpected type 'QTabWidget'
addTab(self, QIcon, str): argument 1 has unexpected type 'QTabWidget'

这是代码:

class App(QMainWindow):

    def launch(self, filepath):
        subprocess.run(filepath)


    def newLauncher(self, matrix): 
        pass  # cut for brevity


    def __init__(self):
        super(App, self).__init__()

        tabbar = QTabBar()
        tab1 = QTabWidget()
        index = tabbar.addTab(tab1, 'tab1')

        self.initUI()


    def initUI(self):

        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

你想了解OOP是好事,但这不是本案的主要问题,但你似乎没有阅读文档。如果我们检查它是 QTabBar it would see that it refers to the top part of the QTabWidget,它就是带按钮的部分。

您不必使用 QTabBarQTabWidgetQTabWidget 具有 addTab 方法,该方法需要将要显示在页面,作为第二个参数,将显示在按钮上的标题。

我在您的代码中看到的另一个错误是您创建了小部件但没有将其设置为另一个小部件的一部分,我们知道这些局部变量在函数完成时会被删除。

由于您正在使用 QMainWindow,因此您必须将 QTabWidget 设置为中央小部件的一部分,为此我们可以使用布局。

import sys

from PyQt5.QtWidgets import *

class App(QMainWindow):
    def __init__(self):
        super(App, self).__init__()

        centralWidget = QWidget()
        lay = QVBoxLayout(centralWidget)

        tab = QTabWidget()
        lay.addWidget(tab)
        for i in range(5):
            page = QWidget()
            tab.addTab(page, 'tab{}'.format(i))

        self.setCentralWidget(centralWidget)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    ex.show()
    sys.exit(app.exec_())