QListView列表视图可以用来以列表的形式来展示数据。在Qt中使用Model-View结构来处理数据与视图之间的关系,Model负责数据的存取,View负责数据的展示, 二者之间数据的交互则是通过委托(delegate)来实现。
QT提供了一些现成的models用于处理数据项:
QStringListModel 用于存储简单的QString列表;StandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据;QDirModel 提供本地文件系统中的文件与目录信息;QSqlQueryModel, QSqlTableModel,QSqlRelationTableModel用来访问数据库;QListView是Model-View框架中的一个类,是Qt Model-View框架的组成部分,QListView实现了QAbstractItemView类定义的接口,以使其能够显示从QAbstractItemModel类派生的模型提供的数据。
QListView常用 *** :
setModel(): 用来设置View所关联的Model,可以使用Python原生的list作为数据源Model;selectedItem(): 选中Model的条目;isSelected(): 判断Model中的某条目是否被选中;setViewMode(): 设置视图模式。(ListMode: 条目从上到下布局,小尺寸显示, IconMode: 条目从左到右布局,大尺寸显示)QListView常用信号:
clicked: 单击某项时,发射此信号;doubleClicked: 双击击某项时,发射此信号;activated: 当用户激活index指定的项目时,发射此信号;entered: 当鼠标光标进入index指定的项目时,发射此信号;iconSizeChanged: 在视图可见时设置此图标大小时,发射此信号;indexesMoved: 在视图中移动索引时,发射此信号;pressed: 按下鼠标按钮时,发射此信号;viewportEntered: 当鼠标光标进入视图时,发射此信号。QListView类继承关系:
使用QStandardItemModel作为QListView 所使用的模型,在QStandardItemModel中每个QStandardItem条目添加一个图标和文本。完整代码如下:
importsys,os fromPyQt5importQtCore,QtGui,QtWidgets fromPyQt5.QtCoreimportQt fromPyQt5.QtGuiimportQIcon,QStandardItem,QStandardItemModel fromPyQt5.QtWidgetsimport(QApplication,QWidget,QListView, QLabel,QVBoxLayout)
classDemoListView(QWidget): def__init__(self,parent=None): super(DemoListView,self).__init__(parent)
#设置窗口标题 self.setWindowTitle('实战PyQt5:QListViewDemo!') #设置窗口大小 self.resize(480,360)
self.initUi()
definitUi(self): vLayout=QVBoxLayout(self)
lv=QListView(self) slm=QStandardItemModel() self.sports=[ {'img':'/images/basketball.png','title':'篮球'}, {'img':'/images/football.png','title':'足球'}, {'img':'/images/rugby-ball.png','title':'橄榄球'}, {'img':'/images/valley-ball.png','title':'排球'} ]
forsportinself.sports: item=QStandardItem(QIcon(os.path.dirname(__file__)+sport['img']),sport['title']) slm.appendRow(item)
lv.setModel(slm) lv.clicked.connect(self.onListViewClicked) self.label=QLabel(self)
vLayout.addWidget(lv) vLayout.addWidget(self.label)
self.setLayout(vLayout)
#设置选中之一行 lv.setCurrentIndex(slm.index(0,0)) self.label.setText('当前选择为:'+self.sports[0]['title'])
defonListViewClicked(self,index): #显示选中的x信息 self.label.setText('当前选择为:'+self.sports[index.row()]['title'])
if__name__=='__main__': app=QApplication(sys.argv) window=DemoListView() window.show() sys.exit(app.exec())
运行结果如下图:
测试QListView
www.gj *** g.com
受俄乌冲突影响,俄罗斯 Sber 银行建议其客户暂时停止安装任何应用程序的软件更新,因为担心这些软件可能包含专门针对俄罗斯用户的恶意代码,被一些人称为“抗议软件”(protestware)。 Sber 的公告写道:“目前,挑衅性媒体内容被引入免费分发的软件的情况已经变得更加频繁。此外,各种内容和...
对于IT管理员和网络安全团队来说,勒索软件攻击是一场与时间赛跑的关键比赛,以检测和控制损害,同时抢救公司的数据资产的剩余部分。但是,当这种事件发生时,有多少反应时间呢?似乎不是很多。正如对10个候选勒索软件的测试所揭示的那样,一种名叫LockBit的勒索软件效率惊人,在四分钟内就加密了一台Windo...
我们已经习惯了来自俄罗斯的大量网络攻击,但在乌克兰被入侵后出现了一个有趣的转变,3月份70%的网络攻击反过来都是针对俄罗斯的。Atlas VPN的研究显示,还有19%的攻击是针对乌克兰的。美国是第三大目标,但国际局势让针对该国的攻击只占总数的5%。 3月5日,随着匿名黑客宣布对俄罗斯进行全面的网络...
隐私和安全成为了 Play Store 的更高优选项。Google 近期封杀第三方通话录音应用之外,还引入了“data safety”(数据安全)部分,要求开发人员提供更多关于他们收集的任何用户数据及其背后目的的信息。现在,Google 公开了 2021 年关于 Play Store 安全的统计数据...
据The Verge报道,根据Bellingcat的调查结果,俄罗斯外卖平台Yandex Food的一次大规模数据泄漏暴露了属于那些与俄罗斯秘密警察有关的递送地址、电话号码、姓名和配送指示。 Yandex Food是俄罗斯大型互联网公司Yandex的子公司,于3月1日首次报告了数据泄漏事件,将其归...
据调查,在近半年的时间里,英国国家卫生系统(NHS)的100多名员工的工作电子邮件帐户被多次用于网络钓鱼活动,其中一些活动旨在窃取Microsoft登录信息。在劫持合法的NHS电子邮件帐户后,这些攻击者于去年10月开始使用它们,并至少在今年4月之前将其继续用于网络钓鱼活动。据电子邮件安全INKY的...