Próbowałem naprawić to przez kilka godzin, ale nawet z poprawkami znalezionymi na innych podobnych pytaniach, mój QtableWidget pokazuje tylko kolumnę / wiersze, a komórki pozostają puste.

Mój kod (usunął części, aby dokonać bardziej czytelny):

import sys
from PyQt5 import QtGui, QtWidgets, QtCore
from PyQt5.QtGui import QStandardItemModel
from PyQt5.QtWidgets import QMainWindow, QApplication, QErrorMessage, QMessageBox, QInputDialog, QLineEdit, QWidget, QTableView, QTableWidgetItem, QHeaderView
import mysql.connector
from MainWindow import Ui_MainWindow

# Connection to my database
mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password="root",
    database="autonoleggio"
)

app = QtWidgets.QApplication(sys.argv)
mycursor = mydb.cursor()

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, obj=None, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setupUi(self)
        self.btn_mostra.clicked.connect(self.MostraListaCategoria)

    def MostraListaCategoria(self):
        mycursor.execute("select * from categoria")
        risultati = mycursor.fetchall()
        self.table_categoria.setRowCount(len(risultati))
        self.table_categoria.setColumnCount(5)
        self.table_categoria.setHorizontalHeaderLabels(["Id", "Descrizione", "Prezzo giorn.", "Prezzo sett.", "Prezzo mensile"])
        self.table_categoria.horizontalHeader().setStretchLastSection(True) 
        self.table_categoria.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        rowcount = 0
        while True:
            sqlRow = mycursor.fetchone()
            if sqlRow == None:
                break
            for col in range(0, 5): 
                self.table_categoria.setItem(rowcount, col, sqlRow[col])
            rowcount += 1

        
def main():
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

A oto plik .ui z Qt Creator przekonwertowany na .py:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1030, 621)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setObjectName("tabWidget")
        self.Categoria = QtWidgets.QWidget()
        self.Categoria.setObjectName("Categoria")
        self.formLayoutWidget = QtWidgets.QWidget(self.Categoria)
        self.formLayoutWidget.setGeometry(QtCore.QRect(80, 30, 331, 157))
        self.formLayoutWidget.setObjectName("formLayoutWidget")
        self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
        self.formLayout.setContentsMargins(0, 0, 0, 0)
        self.formLayout.setObjectName("formLayout")
        self.label_id = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_id.setObjectName("label_id")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_id)
        self.insert_id = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.insert_id.setObjectName("insert_id")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.insert_id)
        self.label_descrizione = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_descrizione.setObjectName("label_descrizione")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_descrizione)
        self.insert_descrizione = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.insert_descrizione.setObjectName("insert_descrizione")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.insert_descrizione)
        self.label_prezzo_giornaliero = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_prezzo_giornaliero.setObjectName("label_prezzo_giornaliero")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_prezzo_giornaliero)
        self.insert_prezzo_giornaliero = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.insert_prezzo_giornaliero.setObjectName("insert_prezzo_giornaliero")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.insert_prezzo_giornaliero)
        self.label_prezzo_settimanale = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_prezzo_settimanale.setObjectName("label_prezzo_settimanale")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_prezzo_settimanale)
        self.insert_prezzo_settimanale = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.insert_prezzo_settimanale.setObjectName("insert_prezzo_settimanale")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.insert_prezzo_settimanale)
        self.label_prezzo_mensile = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_prezzo_mensile.setObjectName("label_prezzo_mensile")
        self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_prezzo_mensile)
        self.insert_prezzo_mensile = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.insert_prezzo_mensile.setObjectName("insert_prezzo_mensile")
        self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.insert_prezzo_mensile)
        self.verticalLayoutWidget = QtWidgets.QWidget(self.Categoria)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(530, 10, 171, 205))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.btn_aggiungi = QtWidgets.QToolButton(self.verticalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.btn_aggiungi.sizePolicy().hasHeightForWidth())
        self.btn_aggiungi.setSizePolicy(sizePolicy)
        self.btn_aggiungi.setCheckable(False)
        self.btn_aggiungi.setObjectName("btn_aggiungi")
        self.verticalLayout.addWidget(self.btn_aggiungi)
        self.btn_rimuovi = QtWidgets.QToolButton(self.verticalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.btn_rimuovi.sizePolicy().hasHeightForWidth())
        self.btn_rimuovi.setSizePolicy(sizePolicy)
        self.btn_rimuovi.setCheckable(False)
        self.btn_rimuovi.setObjectName("btn_rimuovi")
        self.verticalLayout.addWidget(self.btn_rimuovi)
        self.btn_modifica = QtWidgets.QToolButton(self.verticalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.btn_modifica.sizePolicy().hasHeightForWidth())
        self.btn_modifica.setSizePolicy(sizePolicy)
        self.btn_modifica.setCheckable(False)
        self.btn_modifica.setObjectName("btn_modifica")
        self.verticalLayout.addWidget(self.btn_modifica)
        self.btn_mostra = QtWidgets.QToolButton(self.verticalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.btn_mostra.sizePolicy().hasHeightForWidth())
        self.btn_mostra.setSizePolicy(sizePolicy)
        self.btn_mostra.setCheckable(False)
        self.btn_mostra.setObjectName("btn_mostra")
        self.verticalLayout.addWidget(self.btn_mostra)
        self.btn_clear = QtWidgets.QPushButton(self.Categoria)
        self.btn_clear.setGeometry(QtCore.QRect(320, 180, 93, 28))
        self.btn_clear.setObjectName("btn_clear")
        self.insert_cerca = QtWidgets.QLineEdit(self.Categoria)
        self.insert_cerca.setGeometry(QtCore.QRect(60, 270, 161, 22))
        self.insert_cerca.setObjectName("insert_cerca")
        self.btn_cerca = QtWidgets.QPushButton(self.Categoria)
        self.btn_cerca.setGeometry(QtCore.QRect(130, 300, 93, 28))
        self.btn_cerca.setObjectName("btn_cerca")
        self.table_categoria = QtWidgets.QTableWidget(self.Categoria)
        self.table_categoria.setGeometry(QtCore.QRect(240, 270, 751, 241))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.table_categoria.sizePolicy().hasHeightForWidth())
        self.table_categoria.setSizePolicy(sizePolicy)
        self.table_categoria.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
        self.table_categoria.setObjectName("table_categoria")
        self.table_categoria.setColumnCount(0)
        self.table_categoria.setRowCount(0)
        self.tabWidget.addTab(self.Categoria, "")
        self.Noleggio = QtWidgets.QWidget()
        self.Noleggio.setObjectName("Noleggio")
        self.formLayoutWidget_2 = QtWidgets.QWidget(self.Noleggio)
        self.formLayoutWidget_2.setGeometry(QtCore.QRect(40, 60, 391, 261))
        self.formLayoutWidget_2.setObjectName("formLayoutWidget_2")
        self.formNoleggio = QtWidgets.QFormLayout(self.formLayoutWidget_2)
        self.formNoleggio.setContentsMargins(0, 0, 0, 0)
        self.formNoleggio.setObjectName("formNoleggio")
        self.label_nome = QtWidgets.QLabel(self.formLayoutWidget_2)
        self.label_nome.setObjectName("label_nome")
        self.formNoleggio.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_nome)
        self.label_cognome = QtWidgets.QLabel(self.formLayoutWidget_2)
        self.label_cognome.setObjectName("label_cognome")
        self.formNoleggio.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_cognome)
        self.label_data_nascita = QtWidgets.QLabel(self.formLayoutWidget_2)
        self.label_data_nascita.setObjectName("label_data_nascita")
        self.formNoleggio.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_data_nascita)
        self.label_indirizzo = QtWidgets.QLabel(self.formLayoutWidget_2)
        self.label_indirizzo.setObjectName("label_indirizzo")
        self.formNoleggio.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_indirizzo)
        self.label_carta_credito = QtWidgets.QLabel(self.formLayoutWidget_2)
        self.label_carta_credito.setObjectName("label_carta_credito")
        self.formNoleggio.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_carta_credito)
        self.label_data_inizio = QtWidgets.QLabel(self.formLayoutWidget_2)
        self.label_data_inizio.setObjectName("label_data_inizio")
        self.formNoleggio.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_data_inizio)
        self.label_data_fine = QtWidgets.QLabel(self.formLayoutWidget_2)
        self.label_data_fine.setObjectName("label_data_fine")
        self.formNoleggio.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.label_data_fine)
        self.label_targa = QtWidgets.QLabel(self.formLayoutWidget_2)
        self.label_targa.setObjectName("label_targa")
        self.formNoleggio.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_targa)
        self.insert_nome = QtWidgets.QLineEdit(self.formLayoutWidget_2)
        self.insert_nome.setObjectName("insert_nome")
        self.formNoleggio.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.insert_nome)
        self.insert_cognome = QtWidgets.QLineEdit(self.formLayoutWidget_2)
        self.insert_cognome.setObjectName("insert_cognome")
        self.formNoleggio.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.insert_cognome)
        self.insert_data_nascita = QtWidgets.QDateEdit(self.formLayoutWidget_2)
        self.insert_data_nascita.setObjectName("insert_data_nascita")
        self.formNoleggio.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.insert_data_nascita)
        self.insert_indirizzo = QtWidgets.QLineEdit(self.formLayoutWidget_2)
        self.insert_indirizzo.setObjectName("insert_indirizzo")
        self.formNoleggio.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.insert_indirizzo)
        self.insert_carta_credito = QtWidgets.QLineEdit(self.formLayoutWidget_2)
        self.insert_carta_credito.setObjectName("insert_carta_credito")
        self.formNoleggio.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.insert_carta_credito)
        self.insert_targa = QtWidgets.QLineEdit(self.formLayoutWidget_2)
        self.insert_targa.setObjectName("insert_targa")
        self.formNoleggio.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.insert_targa)
        self.insert_data_inizio = QtWidgets.QDateTimeEdit(self.formLayoutWidget_2)
        self.insert_data_inizio.setObjectName("insert_data_inizio")
        self.formNoleggio.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.insert_data_inizio)
        self.insert_data_fine = QtWidgets.QDateTimeEdit(self.formLayoutWidget_2)
        self.insert_data_fine.setObjectName("insert_data_fine")
        self.formNoleggio.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.insert_data_fine)
        self.btn_conferma_noleggio = QtWidgets.QPushButton(self.Noleggio)
        self.btn_conferma_noleggio.setGeometry(QtCore.QRect(340, 320, 93, 28))
        self.btn_conferma_noleggio.setObjectName("btn_conferma_noleggio")
        self.btn_costo_noleggio = QtWidgets.QPushButton(self.Noleggio)
        self.btn_costo_noleggio.setGeometry(QtCore.QRect(230, 320, 93, 28))
        self.btn_costo_noleggio.setObjectName("btn_costo_noleggio")
        self.tabWidget.addTab(self.Noleggio, "")
        self.Cronologia = QtWidgets.QWidget()
        self.Cronologia.setObjectName("Cronologia")
        self.table_cronologia = QtWidgets.QTableWidget(self.Cronologia)
        self.table_cronologia.setGeometry(QtCore.QRect(20, 20, 959, 451))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.table_cronologia.sizePolicy().hasHeightForWidth())
        self.table_cronologia.setSizePolicy(sizePolicy)
        self.table_cronologia.setMouseTracking(False)
        self.table_cronologia.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.table_cronologia.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
        self.table_cronologia.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.table_cronologia.setFrameShadow(QtWidgets.QFrame.Plain)
        self.table_cronologia.setGridStyle(QtCore.Qt.SolidLine)
        self.table_cronologia.setColumnCount(5)
        self.table_cronologia.setObjectName("table_cronologia")
        self.table_cronologia.setRowCount(0)
        self.btn_aggiorna_cronologia = QtWidgets.QPushButton(self.Cronologia)
        self.btn_aggiorna_cronologia.setGeometry(QtCore.QRect(890, 480, 93, 28))
        self.btn_aggiorna_cronologia.setObjectName("btn_aggiorna_cronologia")
        self.tabWidget.addTab(self.Cronologia, "")
        self.verticalLayout_2.addWidget(self.tabWidget)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1030, 26))
        self.menubar.setObjectName("menubar")
        self.menuAutonoleggio = QtWidgets.QMenu(self.menubar)
        self.menuAutonoleggio.setObjectName("menuAutonoleggio")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.menubar.addAction(self.menuAutonoleggio.menuAction())

        self.retranslateUi(MainWindow)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_id.setText(_translate("MainWindow", "id"))
        self.label_descrizione.setText(_translate("MainWindow", "Descrizione"))
        self.label_prezzo_giornaliero.setText(_translate("MainWindow", "Prezzo giornaliero"))
        self.label_prezzo_settimanale.setText(_translate("MainWindow", "Prezzo settimanale"))
        self.label_prezzo_mensile.setText(_translate("MainWindow", "Prezzo mensile"))
        self.btn_aggiungi.setText(_translate("MainWindow", "Aggiungi"))
        self.btn_rimuovi.setText(_translate("MainWindow", "Rimuovi"))
        self.btn_modifica.setText(_translate("MainWindow", "Modifica"))
        self.btn_mostra.setText(_translate("MainWindow", "Mostra tutto"))
        self.btn_clear.setText(_translate("MainWindow", "Clear"))
        self.insert_cerca.setPlaceholderText(_translate("MainWindow", "Cerca categoria..."))
        self.btn_cerca.setText(_translate("MainWindow", "Cerca"))
        self.table_categoria.setSortingEnabled(False)
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.Categoria), _translate("MainWindow", "Categoria"))
        self.label_nome.setText(_translate("MainWindow", "Nome*"))
        self.label_cognome.setText(_translate("MainWindow", "Cognome*"))
        self.label_data_nascita.setText(_translate("MainWindow", "Data di nascita*(GG/MM/AAA)"))
        self.label_indirizzo.setText(_translate("MainWindow", "Indirizzo*"))
        self.label_carta_credito.setText(_translate("MainWindow", "Carta di credito"))
        self.label_data_inizio.setText(_translate("MainWindow", "Data inizio noleggio*"))
        self.label_data_fine.setText(_translate("MainWindow", "Data fine noleggio*"))
        self.label_targa.setText(_translate("MainWindow", "Targa*"))
        self.btn_conferma_noleggio.setText(_translate("MainWindow", "Conferma"))
        self.btn_costo_noleggio.setText(_translate("MainWindow", "Calcola costo"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.Noleggio), _translate("MainWindow", "Noleggio"))
        self.table_cronologia.setSortingEnabled(True)
        self.btn_aggiorna_cronologia.setText(_translate("MainWindow", "Aggiorna"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.Cronologia), _translate("MainWindow", "Cronologia"))
        self.menuAutonoleggio.setTitle(_translate("MainWindow", "Autonoleggio"))


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


Próbuję wykonać, aby wyświetlić treść "kategoryka" tabeli mojej bazy danych do QtableWidget (zwana Table_Categoria) po naciśnięciu przycisku "Mostra Tutto".

Używam Pythona 3.8.5 i Pyqt5

0
loremarconi 24 październik 2020, 19:35

1 odpowiedź

Najlepsza odpowiedź

Użyłeś już fetchall(), co powróci wszystkie wyniki zapytania.

Po tym, gdy zadzwonisz fetchone(), nic nie zwróci, ponieważ nie ma więcej dostępnych wyników.

Powinieneś wypełnić tabelę za pomocą risultati.

Również, {X0}} akceptuje tylko instancje QtablewidgetyTem, a nie struny .

Należy pamiętać, że domyślny konstruktor QTableWidgetItem() akceptuje tylko ciągi za jego wartość, więc jeśli używasz innych typów danych (takich jak liczby całkowite), które musi Ustaw te dane ręcznie z rolą Qt.DisplayRole.

for rowcount, sqlRow in enumerate(risultati):
    for col, value in enumerate(sqlRow):
        item = QTableWidgetItem()
        item.setData(QtCore.Qt.DisplayRole, value)
        self.table_categoria.setItem(rowcount, col, item)
0
musicamante 24 październik 2020, 22:15