PySide——Python图形化界面入门教程(六)

            ——QListView和QStandardItemModel

翻译自:http://pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/

 

上一个教程中,我们讨论了Qt的QListWidget类,它用来实现简单的单列列表框(list boxes)。然而,我们还需要更加灵活的widget来实现列表,Qt为此提供了QListView 来实现多种多样的项。它是一个纯粹的显示部件,用来显示数据模型提供的信息。这样做将将显示功能和数据逻辑分离开来;这同时还有一些其他widget可以显示来自同一模型结构的数据。

这里已经有一些创建好的几种类型的模型。比如,QStandardItemModel提供了比上一节QListWidget更棒的能力;拿文本和图标来说,它提供了拖拽的能力、checkable items和其他一些特性。自定义行为可以通过QAbstractlistModel继承实现——列表数据的通用模型。

PySide的QStandardItemModel

 我们首先从讨论QListView来开始。QListView可以像其他的QWidget一样进行实例化——你是不是对每次讲一个widget都说这句话感到厌烦了?虽然有些啰嗦,但是让我们清晰的记得对象模型;PyQt/Pyside最优秀的地方就是它的简单、好记和继承性。这就是说,QListView构造器接收一个可选的参数parent:

list = QListView(parent)

现在我们的列表需要一个模型来管理它的数据。以我们的列表作为parent参数创建一个QStandardItemModel:

model = QStandardItemModel(list)

QStandardItemModel还有其他一些构造器,但是和我们的单列列表无关,我们有时间再来讨论。

 

PySide的QStandardItem

创建列表和模型是最简单的部分;列表的主要任务创建并嵌入模型。例如,我们先创建一个项:

item = QStandardItem()

方便地设置它的文本和图标:

item.setText('Item text')
item.setIcon(some_QIcon)

我们也可以让项目变成多选的,这将在项目的最左边添加一个复选框(checkbox)

item.setCheckable(True)

你还可以让复选框有三种状态——checked,unchecked,和null,使用

item.setCheckable(True)
 
 

一个简单的QStandardItem例子

我们现在已经了解了QListView足够的背景,尽管它还什么都不能做。我们让QListView成为主窗口来尽可能的简化,就像其它任何QWidget作为主窗口的例子一样进行最基本的设置:

1 list = QListView()
2 list.setWindowTitle('Example List')
3 list.setMinimumSize(600, 400)

接下来创建我们的模型:

model = QStandardItemModel(list)

然后我们创建一些QStandardItem来填充我们的模型。就列出我们想要的吃的事物吧,每一个都有一个文本标题和复选框。

 1 foods = [
 2     'Cookie dough', # Must be store-bought
 3     'Hummus', # Must be homemade
 4     'Spaghetti', # Must be saucy
 5     'Dal makhani', # Must be spicy
 6     'Chocolate whipped cream' # Must be plentiful
 7 ]
 8  
 9 for food in foods:
10     # Create an item with a caption
11     item = QStandardItem(food)
12  
13     # Add a checkbox to it
14     item.setCheckable(True)
15  
16     # Add the item to the model
17     model.appendRow(item)
View Code

相关文章:

  • 2021-09-02
  • 2021-04-11
  • 2021-11-19
  • 2022-12-23
  • 2021-07-12
  • 2022-12-23
  • 2022-01-16
猜你喜欢
  • 2022-12-23
  • 2021-04-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-25
相关资源
相似解决方案