Ответ будет решен, если список вкладок можно изменить во время выполнения. Если этот виджет действительно поддерживает только добавление набора вкладок, но не изменение или добавление новых, список вкладок должен исходить из инициализатора. В противном случае вы также должны добавить метод для выполнения этой работы. Рассмотрим виджет QLabel
, который может установить текст метки в инициализаторе и с помощью метода setText
.
Другие советы по коду.
Аргументы вашего инициализатора немного сбивают с толку, потому что вы принимаете произвольное количество аргументов, но делаете что-то только с первым и ожидаете, что это будет список строк. Четкий список аргументов важен.
Использование apply
для вызова инициализатора базового класса не требуется. Измените код на просто qg.QTabWidget.__init__(self)
При создании виджета PyQt я почти всегда предпочитаю разрешить «родительский» аргумент, даже когда я знаю, что виджет будет виджетом верхнего уровня. Это то, что делают все встроенные методы Pyqt, и это хорошая практика для подражания.
Я также не вижу причины хранить список вкладок, каждая из которых представляет собой словарь из одного элемента. Я подозреваю, что вам не нужно будет вести собственный список вкладок и имен вкладок. QTabWidget может ответить на все вопросы о содержимом.
Если бы я согнул этот пример кода с моими собственными предпочтениями, он бы выглядел следующим образом.
from PyQt4 import QtCore as qc
from PyQt4 import QtGui as qg
class wqTabWidget(qg.QTabWidget):
def __init__(self, parent, tabNames):
qg.QTabWidget.__init__(self, parent)
self.createTabs(tabNames)
def createTabs(tabNames):
for name in tabNames:
tabWidget = qg.QWidget()
self.addTab(tabWidget, name)
if __name__ == '__main__':
app = qg.QApplication(sys.argv)
window = wqTabWidget(None, ['hi', 'there', 'and', 'stuff'])
window.show()
app.exec_()