簡體   English   中英

如何在PyQt5 QTableWidget中獲取選定索引中的項目總數

[英]How to get the sum of items in selected index in PyQt5 QTableWidget

我想獲得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()

要捕獲按下Enter鍵的事件,必須使用QShortCut ,要獲取選定的項,必須使用QTableWidgetselectedIndexes()方法,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM