PyQt5相关¶
具体版本是PyQt5.6
Authors: | Larry@ www.joyglue.com |
---|---|
Version: | 1.0 |
Qt常用模块¶
from PyQt5 import QtWidgets, QtCore,uic,QtGui from PyQt5.QtWidgets import QFileDialog,QMessageBox
动态加载界面资源¶
- class MyDialog(QtWidgets.QDialog):
- def __init__(self, somepara):
- super(MyDialog, self).__init__() basedir=os.path.dirname(os.path.abspath(__file__)) uic.loadUI(os.path.join(basedir, ‘uifile.ui’), self) ...
- def on_BtnQuit_clicked(self):
- sys.exit(0)
- def closeEvent(self, event):
- event.accept()
or event.ignore()
读取同目录下的uifile.ui的GUI文件,然后可直接用self.its_id进行访问。通过PyQt5自带的designer.exe画出界面,然后可以用pyuic5 bbb.ui > b.py生成py文件,然后查看其用法。designer的位置在Anaconda3Librarybindesigner.exe, Qt参考手册路径为Qt5.8.05.8msvc2013_64binassistant.exe
QTreeView的使用¶
setModel和setColumnWidth的顺序:在setModel之前,TreeView还没有数据,也就没有行列宽度(都是0),只有在设置了之后,显示了数据再设置行列宽度才有用。
Qt的Model-view-delegate的delegate被view用以显示model中的数据。没有controller。 Qt的view含有editing功能,功能划分不是很好。 所有的view都从QAbstractitemView派生,基于内建的三种model,提供QlistView、QTableView和QTreeView。为了使用这三种view,必须从QAbstractitemModel派生出model。 QListWidget,QTableWidget、QTreeWidget这些都是view和item model的结合体,对model和view的功能进行了简单的封装。从用户角度看,他们是基于item的。直接对item进行操作而非model。
Model¶
Model的作用是给view提供数据,但model存储数据的方式是不同的,可以从本地,从外部数据源。QAbstractitemModel是所有model的基类。为了使用QTreeView,可以从QAbstractitemModel派生,也可以使用QStandardItemModel。其他的还有QAbstractListModel, QAbstractTableModel。
Delegate¶
功能是在view中控制数据的绘画,根据view来更新model。统一基类是QAbstractItemDelegate。也提供了两个派生类:QStyledItemDelegate和QItemDelegate。通常用 QStyledItemDelegate。 Paint方法用于数据的显示(非编辑模式)
QStandardItemModel¶
此类事标准Qt数据类型的数据仓库。每个item由QStandardItem提供。普通用法是创建空的QStandardItemModel,然后通过appendRow添加item。通过item()访问数据。 通过setHorizontalHeaderLabels 和setVerticalHeaderLabels设置表头。 通过finditems查询,通过sort排序 通过removeRow删除,通过clear清空所有数据
事件和相应的item数据传输是通过QModelIndex链接到QStandardItem的,通过itemFromIndex和indexFromItem相互映射。事件的定义都在QAbstractItemView中
QTimer¶
hello_timer = QtCore.QTimer() hello_timer.timeout.connect(func) hello_timer.start(1000)
QTimer必须借助thread的event loop才能使用。
pyqtSignal()
Qt信号的定义必须在QObject子类的类属性里面。 Qt控件的父子层级关系是由布局决定的,和代码里面构造时传递的parent参数无关。