我一直在努力学习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_())
答案 0 :(得分:0)
你想了解OOP是好的,但这不是这种情况下的主要问题,但似乎你没有阅读文档。如果我们检查它是QTabBar
,它会看到它引用QTabWidget
的顶部,那就是带按钮的部分。
您不必使用QTabBar
,但QTabWidget
,QTabWidget
使用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_())