如何在 PyQt5 QTableWidget 中获取选定索引中的项目总和
Posted
技术标签:
【中文标题】如何在 PyQt5 QTableWidget 中获取选定索引中的项目总和【英文标题】:How to get the sum of items in selected index in PyQt5 QTableWidget 【发布时间】:2019-04-03 05:03:20 【问题描述】:我想获取 currentRow 中所选项目的总和,并在按下 Enter 键时将其显示在明显不同列的同一行
这是从数据库中获取数据的代码
def pay1(self):
con = mdb.connect(host='', user='',password='')
cur = con.cursor()
cur.execute("USE table_1")
x = "SELECT player_name,total,time FROM paid"
cur.execute(x)
self.tableWidget.setRowCount(0)
self.tableWidget.setColumnWidth(0, 100)
self.tableWidget.setColumnWidth(1, 130)
self.tableWidget.setColumnWidth(2, 130)
self.tableWidget.setColumnWidth(3, 130)
self.tableWidget.setHorizontalHeaderItem(0,
QtWidgets.QTableWidgetItem('Player Name'))
self.tableWidget.setHorizontalHeaderItem(1,
QtWidgets.QTableWidgetItem('Total Amount'))
self.tableWidget.setHorizontalHeaderItem(2,
QtWidgets.QTableWidgetItem('Time and Date'))
for row_number, row_data in enumerate(cur):
self.tableWidget.insertRow(row_number)
for column_number, data in enumerate(row_data):
self.tableWidget.setItem(row_number, column_number,
QtWidgets.QTableWidgetItem(str(data)))
con.commit()
【问题讨论】:
你能不能更好地解释一下,根据你想添加“560”、“560”、“786”和“560”的图像但是你想在什么项目(行和列)展示一下? 我想在任何空行上显示它@eyllanesc 据我了解,在控制台中打印总和就足够了,对吗? 我想在第 1 行第 4 列打印它@eyllanesc 【参考方案1】:要捕获按下回车键的事件必须使用QShortCut
,要获取选中项必须使用QTableWidget
的selectedIndexes()
方法,如下所示:
from PyQt5 import QtCore, QtGui, QtWidgets
import random
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
button = QtWidgets.QPushButton("Print me")
self.tableWidget = QtWidgets.QTableWidget()
lay = QtWidgets.QVBoxLayout(self)
lay.addWidget(button)
lay.addWidget(self.tableWidget)
self.fill_table()
QtWidgets.QShortcut(
self.tableWidget,
key=QtGui.QKeySequence(QtCore.Qt.Key_Return),
context=QtCore.Qt.WidgetShortcut,
activated=self.sum_selected
)
def fill_table(self):
self.tableWidget.setColumnCount(4)
self.tableWidget.setRowCount(0)
for i, width in enumerate((100, 130, 130, 130)):
self.tableWidget.setColumnWidth(i, width)
self.tableWidget.setHorizontalHeaderLabels(['Player Name', 'Total Amount', 'Time and Date'])
for i in range(40):
self.tableWidget.insertRow(self.tableWidget.rowCount())
it = QtWidgets.QTableWidgetItem(str(random.randint(100, 150)))
self.tableWidget.setItem(i, 1, it)
@QtCore.pyqtSlot()
def sum_selected(self):
result = sum([float(ix.data()) for ix in self.tableWidget.selectedIndexes() if ix.column() == 1])
r, c = 0, 3
it = self.tableWidget.item(r, c)
if it is None:
it = QtWidgets.QTableWidgetItem(str(result))
self.tableWidget.setItem(r, c, it)
else:
it.setText(str(result))
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
【讨论】:
我想问你如何禁用 qtablewidget 项目。如果我点击''hamza''它变成蓝色意味着它已被检查我怎样才能避免它@eyllanesc @user8055917 “hamza”是什么意思? 你可以在图片@eyllanesc 中看到''hamza''以上是关于如何在 PyQt5 QTableWidget 中获取选定索引中的项目总和的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PYQT5 使 QTableWidget 单元格只读?
如何在 PyQt5 QTableWidget 中获取选定索引中的项目总和
PyQt5如何使用python在迭代循环中更新单元格值Qtablewidget
如何使用 PyQt5 Python 将 QTableWidget 数据转换为 PDF
PyQt5 QTableWidget 禁用后如何重新启用单元格? [复制]
如何从 QComboBox 中获取所选项目以显示在 PyQt5 的 QTableWidget 中? (QComboBox 有复选框来选择项目)