pyqt.docx
- 文档编号:3651681
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:15
- 大小:75.65KB
pyqt.docx
《pyqt.docx》由会员分享,可在线阅读,更多相关《pyqt.docx(15页珍藏版)》请在冰豆网上搜索。
pyqt
pyqt下QTableWidget使用方法小结
分类:
pyqt4qtablewidget2012-12-1814:
48157人阅读评论(0)收藏举报
pyqt4QTableWidgetqtablewidget
QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC、C#中的DataGrid。
说到QTableWidget,就必须讲一下它跟QTabelView的区别了。
QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。
这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。
使用QTableWidget就离不开QTableWidgetItem。
QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。
下面代码实现了一个最简单的含有QTableWidget的小程序:
[python] viewplaincopy
1.#!
/usr/bin/env python
2.#coding=utf-8
3.from PyQt4.QtGui import *
4.from PyQt4.QtCore import *
5.class MyDialog(QDialog):
6. def __init__(self, parent=None):
7. super(MyDialog, self).__init__(parent)
8. self.MyTable = QTableWidget(4,3)
9. self.MyTable.setHorizontalHeaderLabels(['姓名','身高','体重'])
10.
11. newItem = QTableWidgetItem("松鼠")
12. self.MyTable.setItem(0, 0, newItem)
13.
14. newItem = QTableWidgetItem("10cm")
15. self.MyTable.setItem(0, 1, newItem)
16.
17. newItem = QTableWidgetItem("60g")
18. self.MyTable.setItem(0, 2, newItem)
19.
20. layout = QHBoxLayout()
21. layout.addWidget(self.MyTable)
22. self.setLayout(layout)
23.
24.
25.if __name__ == '__main__':
26. import sys
27. app = QApplication(sys.argv)
28. myWindow = MyDialog()
29. myWindow.show()
30. sys.exit(app.exec_())
其中:
self.MyTable=QTableWidget(4,3) 构造了一个QTableWidget的对象,并且设置为4行,3列
self.MyTable.setHorizontalHeaderLabels(['姓名','身高','体重'])则设置表格的表头
newItem=QTableWidgetItem("松鼠") 则是生成了一个QTableWidgetItem的对象,并让其名为“松鼠”
self.MyTable.setItem(0,0,newItem) 将刚才生成的Item加载到第0行、0列处
这样一个简单的QTableWidget就构造完成了。
第一部分:
对QTableWidget本身的效果实现
1.将表格变为禁止编辑
在默认情况下,表格里的字符是可以更改的,比如双击一个单元格,就可以修改原来的内容,如果想禁止用户的这种操作,让这个表格对用户只读,可以这样:
self.MyTable.setEditTriggers(QAbstractItemView.NoEditTriggers) #MyTable是上面代码中生成的QTableWidget对象
QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger枚举中的一个,都是触发修改单元格内容的条件:
QAbstractItemView.NoEditTriggers
0
Noeditingpossible.不能对表格内容进行修改
QAbstractItemView.CurrentChanged
1
Editingstartwhenevercurrentitemchanges.任何时候都能对单元格修改
QAbstractItemView.DoubleClicked
2
Editingstartswhenanitemisdoubleclicked.双击单元格
QAbstractItemView.SelectedClicked
4
Editingstartswhenclickingonanalreadyselecteditem.单击已选中的内容
QAbstractItemView.EditKeyPressed
8
Editingstartswhentheplatformeditkeyhasbeenpressedoveranitem.
QAbstractItemView.AnyKeyPressed
16
Editingstartswhenanykeyispressedoveranitem.按下任意键就能修改
QAbstractItemView.AllEditTriggers
31
Editingstartsforallaboveactions.以上条件全包括
2.设置表格为整行选择
self.MyTable.setSelectionBehavior(QAbstractItemView.SelectRows) #整行选中的方式
QAbstractItemView.SelectionBehavior枚举还有如下类型
Constant
Value
Description
QAbstractItemView.SelectItems
0
Selectingsingleitems.选中单个单元格
QAbstractItemView.SelectRows
1
Selectingonlyrows.选中一行
QAbstractItemView.SelectColumns
2
Selectingonlycolumns.选中一列
3.单个选中和多个选中的设置:
self.MyTable.setSelectionMode(QAbstractItemView.ExtendedSelection) #设置为可以选中多个目标
该函数的参数还可以是:
QAbstractItemView.NoSelection 不能选择
QAbstractItemView.SingleSelection 选中单个目标
QAbstractItemView.MultiSelection 选中多个目标
QAbstractItemView.ExtendedSelection QAbstractItemView.ContiguousSelection的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选
3.表格表头的显示与隐藏
对于水平或垂直方法的表头,可以用以下方式进行隐藏/显示的设置:
self.MyTable.verticalHeader().setVisible(False)
self.MyTable.horizontalHeader().setVisible(False)
就将所有的表头都隐藏起来了,效果如下
4.对表头文字的字体、颜色进行设置
[python] viewplaincopy
1.for x in range(self.MyTable.columnCount()):
2. headItem = self.MyTable.horizontalHeaderItem(x) #获得水平方向表头的Item对象
3. headItem.setFont(textFont) #设置字体
4. headItem.setBackgroundColor(QColor(0,60,10)) #设置单元格背景颜色
5. headItem.setTextColor(QColor(200,111,30)) #设置文字颜色
5.在单元格里加入控件:
QTableWidget不仅允许把文字加到单元格,还允许把控件也放到单元格中。
比如,把一个下拉框加入单元格,可以这么做:
[python] viewplaincopy
1.self.MyCombo = QComboBox()
2.self.MyCombo.addItem("√")
3.self.MyCombo.addItem("×")
4.self.MyTable.setCellWidget(1,0,self.MyCombo)
先生成一个QComboBox的对象,再用QTableWidget类中的setCellWidget函数,将其填入指定的单元格中。
6.signal函数的设置
通过实现itemClicked(QTableWidgetItem*)信号的槽函数,就可以获得鼠标单击到的单元格指针,进而获得其中的文字信息
首先在__init()__函数中加入
self.connect(self.MyTable,SIGNAL("itemClicked(QTableWidgetItem*)"),self.outSelect) #将itemClicked信号与函数outSelect绑定
然后实现一个outSelect函数,如下:
defoutSelect(self,Item=None):
ifItem==None:
return
print(Item.text())
运行程序后,单击一个单元格,即可获得其中的字符了
PS:
在使用过程中发现这一connect方式不知为什么不好用,table的所以signal按这个方式connect都不能正常使用。
而换成table.[signal].connect([function])后就好用了。
比如上一个signal写成table.itemClicked.connect(outSelect)之后就能正常使用了。
第二部分:
对单元格的进行设置
1.单元格设置字体颜色和背景颜色
[python] viewplaincopy
1.newItem = QTableWidgetItem("松鼠")
2.newItem.setBackgroundColor(QColor(0,60,10))
3.newItem.setTextColor(QColor(200,111,100))
4.self.MyTable.setItem(0, 0, newItem)
5.
通过QTableWidgetItem类的setBackgroundColor、setTextColor函数来实现
2.设置单元格中的字体和字符大小
[python] viewplaincopy
1.textFont = QFont("song", 12, QFont.Bold)
2.
3.newItem = QTableWidgetItem("松鼠")
4.#newItem.setBackgroundColor(QColor(0,60,10))
5.#newItem.setTextColor(QColor(200,111,100))
6.newItem.setFont(textFont)
7.self.MyTable.setItem(0, 0, newItem)
首先,先生成一个字体QFont对象,并将其字体设为宋体,大小设为12,并且加粗
再利用单元格的QTableWidgetItem类中的setFont加载给特定的单元格。
如果需要对所有的单元格都使用这种字体,则可以使用
self.MyTable.setFont(testFont) #利用QTableWidget类中的setFont成员函数,将所有的单元格都设成该字体
3.设置单元格内文字的对齐方式:
这个比较简单,使用newItem.setTextAlignment()函数即可,该函数的参数为单元格内的对齐方式,和字符输入顺序是自左相右还是自右向左。
水平对齐方式有:
Constant
Value
Description
Qt.AlignLeft
0x0001
Alignswiththeleftedge.
Qt.AlignRight
0x0002
Alignswiththerightedge.
Qt.AlignHCenter
0x0004
Centershorizontallyintheavailablespace.
Qt.AlignJustify
0x0008
Justifiesthetextintheavailablespace.
垂直对齐方式:
Constant
Value
Description
Qt.AlignTop
0x0020
Alignswiththetop.
Qt.AlignBottom
0x0040
Alignswiththebottom.
Qt.AlignVCenter
0x0080
Centersverticallyintheavailablespace.
如果两种都要设置,只要用 Qt.AlignHCenter | Qt.AlignVCenter的方式即可
4.合并单元格效果的实现:
self.MyTable.setSpan(0,0,3,1) #其参数为:
要改变单元格的 1行数 2列数 要合并的 3行数 4列数
5.设置单元格的大小
首先,可以指定某个行或者列的大小
self.MyTable.setColumnWidth(2,50) #将第2列的单元格,设置成50宽度
self.MyTable.setRowHeight(2,60) #将第2行的单元格,设置成60的高度
还可以将行和列的大小设为与内容相匹配
self.MyTable.resizeColumnsToContents() #将列调整到跟内容大小相匹配
self.MyTable.resizeRowsToContents() #将行大小调整到跟内容的大学相匹配
6单元格Flag的实现
查看Qt的文档发现QTableWidgetItem的Flag有很多种。
Constant
Value
Description
Qt:
:
NoItemFlags
0
Itdoesnothaveanypropertiesset.
Qt:
:
ItemIsSelectable
1
Itcanbeselected.
Qt:
:
ItemIsEditable
2
Itcanbeedited.
Qt:
:
ItemIsDragEnabled
4
Itcanbedragged.
Qt:
:
ItemIsDropEnabled
8
Itcanbeusedasadroptarget.
Qt:
:
ItemIsUserCheckable
16
Itcanbecheckedoruncheckedbytheuser.
Qt:
:
ItemIsEnabled
32
Theusercaninteractwiththeitem.
Qt:
:
ItemIsTristate
64
Theitemischeckablewiththreeseparatestates.
newItem=QtGui.QTableWidgetItem("Del")
newItem.setFlags(QtCore.Qt.ItemIsSelectable)
就设置了一个Flag,如果要设置多个,可以 newItem.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
QTQTableView用法小结
QTableView常用于实现数据的表格显示。
下面我们如何按步骤实现学生信息表格:
一 添加表头
//准备数据模型
QStandardItemModel *student_model = new QStandardItemModel();
student_model->setHorizontalHeaderItem(0, new QStandardItem(QObject:
:
tr("Name")));
student_model->setHorizontalHeaderItem(1, new QStandardItem(QObject:
:
tr("NO.")));
student_model->setHorizontalHeaderItem(2, new QStandardItem(QObject:
:
tr("Sex")));
student_model->setHorizontalHeaderItem(3, new QStandardItem(QObject:
:
tr("Age")));
student_model->setHorizontalHeaderItem(4, new QStandardItem(QObject:
:
tr("College")));
//利用setModel()方法将数据模型与QTableView绑定
ui->student_tableview->setModel(student_model);
二 设置表格属性
//设置列宽不可变动,即不能通过鼠标拖动增加列宽
ui->student_tableview->horizontalHeader()->setResizeMode(0, QHeaderView:
:
Fixed);
ui->student_tableview->horizontalHeader()->setResizeMode(1, QHeaderView:
:
Fixed);
ui->student_tableview->horizontalHeader()->setResizeMode(2, QHeaderView:
:
Fixed);
ui->student_tableview->horizontalHeader()->setResizeMode(3, QHeaderView:
:
Fixed);
ui->student_tableview->horizontalHeader()->setResizeMode(4, QHeaderView:
:
Fixed);
//设置表格的各列的宽度值
ui->student_tableview->setColumnWidth(0,100);
ui->student_tableview->setColumnWidth(1,100);
ui->student_tableview->setColumnWidth(2,100);
ui->student_tableview->setColumnWidth(3,100);
ui->student_tableview->setColumnWidth(4,100);
//默认显示行头,如果你觉得不美观的话,我们可以将隐藏
ui->student_tableview->verticalHeader()->hide();
//设置选中时为整行选中
ui->student_tableview->setSelectionBehavior(QAbstractItemView:
:
SelectRows);
//设置表格的单元为只读属性,即不能编辑
ui->student_tableview->setEditTriggers(QAbstractItemView:
:
NoEditTriggers);
//如果你用在QTableView中使用右键菜单,需启用该属性
ui->tstudent_tableview->setContextMenuPolicy(Qt:
:
CustomContextMenu);
三 动态添加行
在表格中添加行时,我们只需要在model中插入数据即可,一旦model中的数据发生变化,QTabelView显示就会做相应的变动
//在第一行添加学生张三的个人信息(setItem函数的第一个参数表示行号,第二个表示列号,第三个为要显示的数据)
student_model->setItem(0, 0, new QStandardItem(“张三"));
student_model->setItem(0, 1, new QStandardItem("20120202"));
student_model->setI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- pyqt