Gewusst wie: hinzufügen und abrufen von Elementen und von QTableWidget, mit PyQt5?

Ich bin mit Python 3.4 und PyQt5.

Ich bin neu in python und Qt. Ich habe Probleme mit Tabellen in meiner GUI, ich bin momentan dabei mit dem Qt Designer, speziell die setItem() und item() Funktionen, die ich schrieb zwei Funktionen, die jeweils ausgeführt werden soll mit einer Taste.

'addRow(self)' zum erstellen und Auffüllen einer Zeile auf QTableWidget mit Werten aus QLineEdit.

'sumCol(self)' Schleife über alle Zeilen, fügen Sie jedes Element einer Spalte zu einer Liste, finden Sie die Gesamtsumme, und drucken QLineEdit

Ich erhalte die folgende Fehlermeldung:

AttributeError: 'module' object has no attribute 'QTableWidgetItem'

Mein code:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from test_1 import Ui_MainWindow

class TestApp(Ui_MainWindow):
    def __init__(self, dialog):
        Ui_MainWindow.__init__(self)
        self.setupUi(dialog)

        self.addButton.clicked.connect(self.addRow)
        self.sumColButton.clicked.connect(self.sumCol)

    def addRow(self):
        #Retrieve text from QLineEdit
        x = str(self.x_input.text())
        y = str(self.y_input.text())
        z = str(self.z_input.text())        
        #Create a empty row at bottom of table
        numRows = self.tableWidget.rowCount()
        self.tableWidget.insertRow(numRows)     
        #Add text to the row
        self.tableWidget.setItem(numRows, 0, QtGui.QTableWidgetItem(x))
        self.tableWidget.setItem(numRows, 1, QtGui.QTableWidgetItem(y))
        self.tableWidget.setItem(numRows, 2, QtGui.QTableWidgetItem(z))

    def sumCol(self):
        #Create lists to hold values from each column
        xlist = []
        ylist = []
        zlist = []
        numRows = self.tableWidget.rowCount()
        for row in range(numRows):
            #Retreive item from the cell
            xitem = self.tableWidget.item(row, 0)
            yitem = self.tableWidget.item(row, 1)
            zitem = self.tableWidget.item(row, 2)
            #item to text
            x = float(xitem.text())
            y = float(yitem.text())
            z = float(zitem.text())
            #Add to list
            xlist.append(x)
            ylist.append(y)
            zlist.append(z)
        #Sum values in the column
        xsum = str(sum(xlist))
        ysum = str(sum(ylist))
        zsum = str(sum(zlist))
        #Display sum
        self.xdisp.setText(xsum)
        self.ydisp.setText(ysum)
        self.zdisp.setText(zsum)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    dialog = QtWidgets.QMainWindow()

    test_1 = TestApp(dialog)

    dialog.show()
    sys.exit(app.exec_())

Die GUI-Datei, test_1.py:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.x_input = QtWidgets.QLineEdit(self.centralwidget)
        self.x_input.setGeometry(QtCore.QRect(30, 10, 61, 21))
        self.x_input.setObjectName("x_input")
        self.z_input = QtWidgets.QLineEdit(self.centralwidget)
        self.z_input.setGeometry(QtCore.QRect(30, 70, 61, 21))
        self.z_input.setObjectName("z_input")
        self.y_input = QtWidgets.QLineEdit(self.centralwidget)
        self.y_input.setGeometry(QtCore.QRect(30, 40, 61, 21))
        self.y_input.setObjectName("y_input")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(110, 10, 311, 161))
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        self.addButton = QtWidgets.QPushButton(self.centralwidget)
        self.addButton.setGeometry(QtCore.QRect(20, 100, 75, 23))
        self.addButton.setObjectName("addButton")
        self.ydisp = QtWidgets.QLineEdit(self.centralwidget)
        self.ydisp.setGeometry(QtCore.QRect(540, 50, 61, 21))
        self.ydisp.setObjectName("ydisp")
        self.xdisp = QtWidgets.QLineEdit(self.centralwidget)
        self.xdisp.setGeometry(QtCore.QRect(470, 50, 61, 21))
        self.xdisp.setObjectName("xdisp")
        self.zdisp = QtWidgets.QLineEdit(self.centralwidget)
        self.zdisp.setGeometry(QtCore.QRect(620, 50, 61, 21))
        self.zdisp.setObjectName("zdisp")
        self.sumColButton = QtWidgets.QPushButton(self.centralwidget)
        self.sumColButton.setGeometry(QtCore.QRect(460, 20, 75, 23))
        self.sumColButton.setObjectName("sumColButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "x"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "y"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "z"))
        self.addButton.setText(_translate("MainWindow", "Add Row"))
        self.sumColButton.setText(_translate("MainWindow", "Sum Column"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
  • Hallo @zdub, versuchen meine Lösung
  • Entfernen Sie bitte den "Gelöst" aus Ihrem Titel und post die Lösung, die Sie fand als eine richtige Antwort.
InformationsquelleAutor zdub | 2016-11-26
Schreibe einen Kommentar