0

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

一些代码/错误是:

代码:

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_())
4

1 回答 1

1

您想了解 OOP 很好,但这不是这种情况下的主要问题,但您似乎没有阅读文档。如果我们检查它是 aQTabBar它会看到它指的是 的顶部QTabWidget,它是带有按钮的部分。

您不必使用QTabBarbut QTabWidgetQTabWidgetaddTab方法需要将显示在页面上的小部件作为第一个参数,并将显示在按钮上的标题作为第二个参数。

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

由于您正在使用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_())
于 2018-03-10T02:31:22.367 回答