PyQt5是一个基于Python语言的GUI开发框架,其中的QListWidget控件提供了显示列表型数据的基础控件。有时候,为了更好地展示列表中的数据,需要调整QListWidget的布局模式。本篇文章将为大家详细讲解Python的PyQt5 QListWidget-设置布局模式的完整使用攻略。
1. 设置QListWidget为网格布局
使用PyQt5中的QListWidget创建一个显示图书信息的控件,展示各图书的名称、作者和出版信息,通过设置为网格布局模式,使图书间的间距更加合适,更加美观。
import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem, QHBoxLayout, QWidget, QLabel
class BookList(QWidget):
def __init__(self):
super(BookList, self).__init__()
# 创建QListWidget控件
self.list_widget = QListWidget()
# 设置QListWidget为网格布局模式
self.list_widget.setViewMode(QListWidget.IconMode)
self.list_widget.setResizeMode(QListWidget.Adjust)
self.list_widget.setMovement(QListWidget.Static)
self.list_widget.setSpacing(10)
# 添加书籍
self.add_book('Python数据分析', 'Wes McKinney', 'O\'Reilly', 'https://covers.oreillystatic.com/images/0636920050896/cat.gif')
self.add_book('深入浅出MySQL', '胡晓阳', '清华大学', 'https://img9.doubanio.com/view/subject/s/public/s28015297.jpg')
self.add_book('百年孤独', '加西亚·马尔克斯', '南海出版公司', 'https://img3.doubanio.com/view/subject/s/public/s1727290.jpg')
layout = QHBoxLayout()
layout.addWidget(self.list_widget)
self.setLayout(layout)
def add_book(self, name, author, publish, url):
item = QListWidgetItem()
item_widget = QWidget()
item_widget.setObjectName('bookItem')
# 创建各项图书信息控件
name_label = QLabel(name)
author_label = QLabel(author)
publish_label = QLabel(publish)
image_label = QLabel()
image_label.setPixmap(QPixmap(url))
# 设置布局
layout = QVBoxLayout()
layout.addWidget(image_label)
layout.addWidget(name_label)
layout.addWidget(author_label)
layout.addWidget(publish_label)
item_widget.setLayout(layout)
# 设置QListWidgetItem的大小
item.setSizeHint(item_widget.sizeHint())
self.list_widget.addItem(item)
self.list_widget.setItemWidget(item, item_widget)
if __name__ == '__main__':
app = QApplication(sys.argv)
book_list = BookList()
book_list.show()
sys.exit(app.exec_())
在上述代码中,我们通过调用QListWidget的setViewMode
函数将QListWidget控件设置为网格模式;setResizeMode
函数用于指定控件部件的大小调整策略;setMovement
函数指明控件部件是否可移动;setSpacing
函数用于设置列表项之间的水平间距和垂直间距。
同时,我们还定义了自己的add_book
函数,用来添加书籍信息。在该函数中,我们通过QVBoxLayout
将各项图书信息控件垂直布局,最终传入QListWidgetItem
中进行展示。
2. 设置QListWidget为平铺布局
使用PyQt5中的QListWidget创建一个显示城市信息的控件,展示各城市的名字和照片,通过设置为平铺布局模式,可以更好地展示城市的整体风貌。
import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem, QHBoxLayout, QWidget, QLabel
class CityList(QWidget):
def __init__(self):
super(CityList, self).__init__()
# 创建QListWidget控件
self.list_widget = QListWidget()
# 设置QListWidget为平铺布局模式
self.list_widget.setViewMode(QListWidget.IconMode)
self.list_widget.setResizeMode(QListWidget.Adjust)
self.list_widget.setMovement(QListWidget.Static)
self.list_widget.setWrapping(True)
self.list_widget.setWordWrap(True)
self.list_widget.setIconSize(320, 240)
# 添加城市
self.add_city('New York', 'https://cdn.pixabay.com/photo/2016/11/14/04/45/new-york-city-1820413_960_720.jpg')
self.add_city('Paris', 'https://cdn.pixabay.com/photo/2016/01/19/17/48/louvre-pyramid-1156738_960_720.jpg')
self.add_city('Tokyo', 'https://cdn.pixabay.com/photo/2015/06/08/15/18/tokyo-802664_960_720.jpg')
self.add_city('Beijing', 'https://cdn.pixabay.com/photo/2016/08/03/08/10/great-wall-of-china-1566111_960_720.jpg')
layout = QHBoxLayout()
layout.addWidget(self.list_widget)
self.setLayout(layout)
def add_city(self, name, url):
item = QListWidgetItem()
item_widget = QLabel()
item_widget.setObjectName('cityItem')
# 创建城市名字标签和照片标签
name_label = QLabel(name)
image_label = QLabel()
image_label.setPixmap(QPixmap(url))
# 设置布局
layout = QVBoxLayout()
layout.addWidget(image_label)
layout.addWidget(name_label)
item_widget.setLayout(layout)
# 设置QListWidgetItem的大小
item.setSizeHint(item_widget.sizeHint())
self.list_widget.addItem(item)
self.list_widget.setItemWidget(item, item_widget)
if __name__ == '__main__':
app = QApplication(sys.argv)
city_list = CityList()
city_list.show()
sys.exit(app.exec_())
在上述代码中,我们通过调用QListWidget的setViewMode
函数将QListWidget控件设置为平铺模式;setResizeMode
函数用于指定控件部件的大小调整策略;setMovement
函数指明控件部件是否可移动;setWrapping
和setWordWrap
函数用于控制列表项是否自动换行;setIconSize
函数用于设置列表项的图标大小。
我们同样定义了自己的add_city
函数,用来添加城市信息。在该函数中,我们通过QVBoxLayout
将各项城市信息控件垂直布局,最终传入QListWidgetItem
中进行展示。
综上所述,上述两个示例详细说明了如何在Python的PyQt5中使用QListWidget控件,并通过设置不同的布局模式更好地展示列表数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 QListWidget – 设置布局模式 - Python技术站