2014-01-11 6 views
0

내가하고 싶은 것은 각 탭에 listView, TableView 또는 일부 위젯이 포함되어있는 탭을 동적으로 QTabWidget에 추가하고 해당 탭을 제어 할 모델에 할당하는 것입니다. 표시 할 데이터 탭 수는 다른 함수의 출력 수에 의해 결정되며 데이터는 탭이 포함 할보기 유형을 결정합니다.QTabWidget (PyQt)의 탭 뷰를 동적으로 변경하십시오.

이제 내가 직면하고있는 문제는 어떻게 실행 중에 동적으로 탭에 뷰를 놓을 수 있는가하는 것입니다.

답변

2

addTab을 사용하여 페이지를 동적으로 추가 할 수 있습니다. QTabWidget reference documentation을 살펴보십시오. lists 또는 tables을 추가하는 것은 위젯을 작성하여 페이지에 추가하는 경우입니다.

import sys, random 
from PyQt4 import QtCore, QtGui 

class TabContainer(QtGui.QWidget): 
    def __init__(self): 
    super(TabContainer, self).__init__() 
    self.next_item_is_table = False 
    self.initUI() 

    def initUI(self): 
    self.setGeometry(150, 150, 650, 350) 
    self.tabwidget = QtGui.QTabWidget(self) 
    vbox = QtGui.QVBoxLayout() 
    vbox.addWidget(self.tabwidget) 
    self.setLayout(vbox) 
    self.pages = [] 
    self.add_page() 
    self.show() 

    def create_page(self, *contents): 
    page = QtGui.QWidget() 
    vbox = QtGui.QVBoxLayout() 
    for c in contents: 
     vbox.addWidget(c) 

    page.setLayout(vbox) 
    return page 

    def create_table(self): 
    rows, columns = random.randint(2,5), random.randint(1,5) 
    table = QtGui.QTableWidget(rows, columns) 
    for r in xrange(rows): 
     for c in xrange(columns): 
      table.setItem(r, c, QtGui.QTableWidgetItem(str(random.randint(0,10)))) 
    return table 

    def create_list(self): 
    list = QtGui.QListWidget() 
    columns = random.randint(2,5) 
    for c in xrange(columns): 
     QtGui.QListWidgetItem(str(random.randint(0,10)), list) 

    return list 

    def create_new_page_button(self): 
    btn = QtGui.QPushButton('Create a new page!') 
    btn.clicked.connect(self.add_page) 
    return btn 

    def add_page(self): 
    if self.next_item_is_table: 
     self.pages.append(self.create_page(self.create_table(), self.create_new_page_button())) 
     self.next_item_is_table = False 
    else: 
     self.pages.append(self.create_page(self.create_list(), self.create_new_page_button())) 
     self.next_item_is_table = True 

    self.tabwidget.addTab(self.pages[-1] , 'Page %s' % len(self.pages)) 
    self.tabwidget.setCurrentIndex(len(self.pages)-1) 

app = QtGui.QApplication(sys.argv) 
ex = TabContainer() 
sys.exit(app.exec_()) 
+0

탭의의 추가은 작은 부분 :

여기에 빠른 예입니다. 각 탭에 표보기 또는 목록보기가 채워 져야한다면 어떻게 할 수 있을까요? 이것이 내가 직면하고있는 진짜 문제입니다. – TheCreator232

+0

표 또는 목록을 추가하는 과정은 동일한 과정을 거치며 위젯을 만들고 페이지에 추가하기 만하면됩니다. 내 업데이트 답변을 참조하십시오. –

관련 문제