动态更改 QTabWidget (PyQt) 中选项卡的视图 [英] Dynamically change view of tabs in a QTabWidget (PyQt)

查看:55
本文介绍了动态更改 QTabWidget (PyQt) 中选项卡的视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要做的是将 Tabs 动态添加到 QTabWidget ,其中每个选项卡都包含一个 listView 、 TableView 或一些小部件,并将它们分配给一个模型,该模型将控制要显示的数据.选项卡的数量由另一个函数的输出数量决定,数据决定选项卡将包含的视图类型.

What i want to do is dynamically add Tabs to a QTabWidget , where each tab is containing either a listView , TableView or some widget and assign them to a model which will control the data to be displayed. The number of Tabs is decided by the number of outputs of another function and the data decides what type of view the tab is going to contain.

现在我面临的问题是如何在执行期间动态地将视图放入选项卡中.

Now the problem that i am facing is that how do i put the view in the tab dynamically during execution .

推荐答案

您可以使用 addTab 动态添加页面.查看 QTabWidget 参考文档.添加列表tables 只是创建小部件并将它们添加到页面的一个例子.

You can add pages dynamically using addTab. Have a look at the QTabWidget reference documentation. Adding lists or tables is just a case of creating the widgets and adding them to the page.

这是一个简单的例子:

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

这篇关于动态更改 QTabWidget (PyQt) 中选项卡的视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆