常用控件2

组合选择框

QComboBox 是组合选择框,如下图所示

image

官网介绍

信号:选项改变

如果用户操作修改了QComboBox中的选项就会发出 currentIndexChanged 信号,可以这样指定处理该信号的函数

cbox.currentIndexChanged.connect(handleSelectionChange)

方法:添加一个选项

代码中可以使用 addItem 方法来添加一个选项到 末尾 ,参数就是选项文本

cbox.addItem('byhy')

方法:添加多个选项

代码中可以使用 addItems 方法来添加多个选项到 末尾,参数是包含了多个选项文本的列表

cbox.addItems(['byhy','白月黑羽','python教程'])

方法:清空选项

代码中可以使用 clear 方法来清空选项,也就是删除选择框内所有的选项

cbox.clear()

方法:获取当前选项文本

代码中可以使用 currentText 方法来获取当前 选中的选项 的文本,比如

method = cbox.currentText()

列表

QListWidget 是列表控件,如下图所示

image

Qt Designer 如下图 选择:

image

官网介绍

方法:添加一个选项

代码中可以使用 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 是表格控件,如下图所示

image

Qt Designer 如下图 选择:

image


官网介绍

创建列 和 标题栏

我们可以通过 Qt designer 为一个表格创建列和对应的标题栏。

只需要双击 Qt designer 设计的窗体中的 表格控件, 就会出现这样的对话框。

image

标签栏中,点击左下角的加号,就可以为 添加一个列,并且设置标题栏名称。

image

方法:设置表格行数

代码中可以使用 setRowCount 方法来设置表格行数,比如

table.setRowCount(10)

方法:获取所有行数

代码中可以使用 rowCount 方法来获取表格所有的函数,比如

rowcount = table.rowCount()

方法:获取当前选中是第几行

代码中可以使用 currentRow 方法来获取当前选中是第几行,比如

currentrow = table.currentRow()

注意:行数是从0开始的, 第一行的行数是 0

方法:插入一行、删除一行

insertRow 方法可以在指定位置插入一行,比如

table.insertRow(0)

就插入一行到第 1 行这个位置, 表格原来第1行(包括原来的第1行)以后的内容,全部往下移动一行。

table.insertRow(2)

就插入一行到第 3 行这个位置, 表格原来第3行(包括原来的第3行)以后的内容,全部往下移动一行。


removeRow 方法可以删除指定位置的一行,比如

table.removeRow(0)

就删除第 1 行, 表格原来第1行以后的内容,全部往上移动一行。

table.removeRow(2)

就删除第 3 行, 表格原来第3行以后的内容,全部往上移动一行。

方法:清除/删除所有内容

clearContents 方法可以清除表格所有的内容,比如

table.clearContents()

清除后,仍然会留下表格栏


如果连表格栏都要删除,可以加上 setRowCount(0),像这样

table.clearContents()
table.setRowCount(0)

方法:获取单元格文本的内容

item 方法可以指定位置的单元格对象(QTableWidgetItem) ,再调用这个对象的 text 方法,就可以获取文本内容,比如

table.item(0,0).text()

就获取了 第1行,第1列 的单元格里面的文本。

table.item(2,4).text()

就获取了 第3行,第5列 的单元格里面的文本。

方法:设置单元格文本内容

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.AlignHCenter) 
table.setItem(row, 0, item)

方法:设定列宽、宽度自动缩放

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()

实战练习

表格控件常用于展示行列结构的数据, 比如数据库数据。下面的截图是实战班的一个数据库 和 表格控件 数据联动的练习。

小班学员请联系老师获取相关练习和参考代码。

image

上一页
下一页