PYQT5|Pyside2常用控件详细教程2
组合选择框
QComboBox
是组合选择框,如下图所示
信号:选项改变
如果用户操作修改了QComboBox中的选项就会发出 currentIndexChanged
信号,可以这样指定处理该信号的函数
cbox.currentIndexChanged.connect(handleSelectionChange)
添加一个选项
代码中可以使用 addItem
方法来添加一个选项到 末尾
,参数就是选项文本
cbox.addItem('byhy')
添加多个选项
代码中可以使用 addItems
方法来添加多个选项到 末尾
,参数是包含了多个选项文本的列表
cbox.addItems(['byhy','白月黑羽','python教程'])
清空选项
代码中可以使用 clear
方法来清空选项,也就是删除选择框内所有的选项
cbox.clear()
获取当前选项文本
代码中可以使用 currentText
方法来获取当前 选中的选项
的文本,比如
method = cbox.currentText()
列表
QListWidget
是列表控件,如下图所示
Qt Designer 如下图 选择:
添加一个选项
代码中可以使用 addItem
方法来添加一个选项到 末尾
,参数就是选项文本
listWidget.addItem('byhy')
添加多个选项
代码中可以使用 addItems
方法来添加多个选项到 末尾
,参数是包含了多个选项文本的列表
listWidget.addItems(['byhy','白月黑羽','python教程'])
删除一个选项
代码中可以使用 takeItem
方法来删除1个选项,参数是该选项所在行
listWidget.takeItem(1)
就会删除第二行选项
清空选项
代码中可以使用 clear
方法来清空选项,也就是删除选择框内所有的选项
listWidget.clear()
获取当前选项文本
currentItem
方法可以得到列表当前选中项对象(QListWidgetItem) ,再调用这个对象的 text
方法,就可以获取文本内容,比如
listWidget.currentItem().text()
就获取了 第1行,第1列
的单元格里面的文本。
listWidget.currentItem().text()
表格
QTableWidget
是表格控件,如下图所示
表格控件单元格里面可以显示文字,也可以显示富文本、图片等内容。
表格控件的每个单元格里面要显示内容,都必须创建一个 QTableWidgetItem
类型的对象。
Qt Designer 如下图 选择:
创建列 和 标题栏
我们可以通过 Qt designer 为一个表格创建列和对应的标题栏。
只需要双击 Qt designer 设计的窗体中的 表格控件, 就会出现这样的对话框。
在 列
标签栏中,点击左下角的加号,就可以为 添加一个列,并且设置标题栏名称。
插入一行、删除一行
insertRow
方法可以在指定位置插入一行,比如
table.insertRow(0)
就插入一行到第 1
行这个位置, 表格原来第1行(包括原来的第1行)以后的内容,全部往下移动一行。
table.insertRow(2)
就插入一行到第 3
行这个位置, 表格原来第3行(包括原来的第3行)以后的内容,全部往下移动一行。
removeRow
方法可以删除指定位置的一行,比如
table.removeRow(0)
就删除第 1
行, 表格原来第1行以后的内容,全部往上移动一行。
table.removeRow(2)
就删除第 3
行, 表格原来第3行以后的内容,全部往上移动一行。
设置单元格内容、对齐、属性
qt表格的单元格内的内容对象 是一个 单元格对象 QTableWidgetItem
实例
如果单元格 没有被设置过
内容,可以这样
from PySide2.QtWidgets import QTableWidgetItem
item = QTableWidgetItem()
item.setText('白月黑羽')
table.setItem(row, 0, item)
也可以简写为
from PySide2.QtWidgets import QTableWidgetItem
table.setItem(row, 0, QTableWidgetItem('白月黑羽'))
如果单元格 已经被设置过
文本内容,
item
方法可以获取指定位置的 QTableWidgetItem ,再调用这个对象的 setText
方法,就可以设置单元格文本内容,比如
table.item(0,0).setText('白月黑羽-江老师')
就设置了 第1行,第1列
的单元格里面的文本。
table.item(2,4).setText('白月黑羽-江老师')
就设置了 第3行,第5列
的单元格里面的文本。
如果希望某个单元格为 只读,不允许修改,可以使用QTableWidgetItem对象的 setFlags
方法,像这样
from PySide2.QtWidgets import QTableWidgetItem
from PySide2.QtCore import Qt
item = QTableWidgetItem('白月黑羽')
item.setFlags(Qt.ItemIsEnabled) # 参数名字段不允许修改
table.setItem(row, 0, item)
如果想文本内容 居中对齐,每个当对应的QTableWidgetItem 调用 setTextAlignment,如下
from PySide2.QtWidgets import QTableWidgetItem
from PySide2.QtCore import Qt
item = QTableWidgetItem()
item.setText('白月黑羽')
# 文本居中
item.setTextAlignment(Qt.AlignCenter)
table.setItem(row, 0, item)
如果想设置 表格框 和 单元格边线 的颜色,可以使用样式如下
QTableWidget {
border:1px solid green;
gridline-color: rgb(71, 191, 255);
}
获取单元格文本的内容
item
方法可以指定位置的单元格对象(QTableWidgetItem) ,再调用这个对象的 text
方法,就可以获取文本内容,比如
table.item(0,0).text()
就获取了 第1行,第1列
的单元格里面的文本。
table.item(2,4).text()
就获取了 第3行,第5列
的单元格里面的文本。
获取所有行数、列数
代码中可以使用 rowCount
方法来获取表格所有的 行数
,比如
rowcount = table.rowCount()
可以使用 columnCount
方法来获取表格所有的 列数
,比如
rowcount = table.columnCount()
获取当前选中是第几行
代码中可以使用 currentRow
方法来获取当前选中是第几行,比如
currentrow = table.currentRow()
注意:行数是从0开始的, 第一行的行数是 0
设置表格行数、列数
代码中可以使用 setRowCount
方法来设置表格 行数
,比如
table.setRowCount(10)
代码中可以使用 setColumnCount
方法来设置表格 列数
,比如
table.setColumnCount(10)
清除/删除所有内容
clearContents
方法可以清除表格所有的内容,比如
table.clearContents()
清除后,仍然会留下表格栏
如果连表格栏都要删除,可以使用 setRowCount(0)
,像这样
table.setRowCount(0)
设定列宽、宽度自动缩放
Qt Designer 上目前没法拖拽设定 每个列的宽度,只能在代码中指定。
如下所示
# 设定第1列的宽度为 180像素
table.setColumnWidth(0, 180)
# 设定第2列的宽度为 100像素
table.setColumnWidth(1, 100)
如想让 表格控件宽度 随着父窗口的缩放自动缩放,可以
在 属性编辑器 中 勾选 HorizontalHeaderStretchLastSection
或者使用下面代码
table.horizontalHeader().setStretchLastSection(True)
信号:单元格内容改动
当用户修改了一个单元格的内容,会发出 cellChanged
信号,并且携带参数指明该单元格的行号和列号。
我们的代码可以对该信号进行相应的处理。
示例代码如下
def __init__(self):
# 指定单元格改动信号处理函数
self.ui.table.cellChanged.connect(self.cfgItemChanged)
def cfgItemChanged(self,row,column):
# 获取更改内容
cfgName = self.ui.table.item(row, 0).text() # 首列为配置名称
cfgValue = self.ui.table.item(row, column).text()
边界线样式
表格控件的边界线颜色可以通过QSS 属性 gridline-color
指定
如下所示
QTableWidget {
gridline-color: green;
}
就会指定表格边界线颜色为 绿色。
实战练习
表格控件常用于展示行列结构的数据, 比如数据库数据。下面的截图是实战班的一个数据库 和 表格控件 数据联动的练习。
小班学员请联系老师获取相关练习和参考代码。