簡體   English   中英

PyQt5無法創建標簽欄或標簽

[英]PyQt5 can't create Tabbars or Tabs

我一直在努力學習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_())

您想了解OOP很好,但是在這種情況下,這不是主要問題,但似乎您沒有閱讀本文檔。 如果我們檢查它是否為QTabBar ,則會看到它指向QTabWidget的頂部,即帶有按鈕的那部分。

您不必使用QTabBarQTabWidgetQTabWidgetaddTab需要作為第一個參數,將在頁面上顯示的窗口小部件,並作為第二個參數,將出現在按鈕的標題方法。

我在您的代碼中看到的另一個錯誤是,您創建了窗口小部件,但未將其設置為另一個窗口小部件的一部分,而只是我們知道函數完成后會刪除的局部變量。

由於您使用的是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_())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM