Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x sqlite3表转换为QTableWidget、sqlite3、PyQt5_Python 3.x_Sqlite_Pyqt5 - Fatal编程技术网

Python 3.x sqlite3表转换为QTableWidget、sqlite3、PyQt5

Python 3.x sqlite3表转换为QTableWidget、sqlite3、PyQt5,python-3.x,sqlite,pyqt5,Python 3.x,Sqlite,Pyqt5,我已经创建了一个程序来管理数据库中的表,现在我正在尝试为它制作一个gui,我认为最简单的方法是使用Qt Designer,然后使用PyQt5将其转换为python,所以我做到了,我知道如何将函数绑定到按钮,但是我不知道更复杂的事情,比如在Qtablewidget中显示表列和行,假设我有下面的数据库: import sqlite3 conn = sqlite3.connect('realscheduler.db') c = conn.cursor() c.execute('pragma forei

我已经创建了一个程序来管理数据库中的表,现在我正在尝试为它制作一个gui,我认为最简单的方法是使用Qt Designer,然后使用PyQt5将其转换为python,所以我做到了,我知道如何将函数绑定到按钮,但是我不知道更复杂的事情,比如在Qtablewidget中显示表列和行,假设我有下面的数据库:

import sqlite3
conn = sqlite3.connect('realscheduler.db')
c = conn.cursor()
c.execute('pragma foreign_keys = ON;')
conn.commit()
对于一个名为professors的表,其中有6列,我该如何在下面的QtableWidget中显示该表及其列和行

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'testui.ui'
#
# Created by: PyQt5 UI code generator 5.4.1
#
# WARNING! All changes made in this file will be lost!

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.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.tableWidget = QtWidgets.QTableWidget(self.tab)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(0)
        self.tableWidget.setRowCount(0)
        self.verticalLayout_2.addWidget(self.tableWidget)
        self.tabWidget.addTab(self.tab, "")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tab_2)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.tableWidget_2 = QtWidgets.QTableWidget(self.tab_2)
        self.tableWidget_2.setObjectName("tableWidget_2")
        self.tableWidget_2.setColumnCount(0)
        self.tableWidget_2.setRowCount(0)
        self.horizontalLayout_2.addWidget(self.tableWidget_2)
        self.tabWidget.addTab(self.tab_2, "")
        self.verticalLayout.addWidget(self.tabWidget)
        self.horizontalLayout.addLayout(self.verticalLayout)
        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)
        self.tabWidget.setCurrentIndex(1)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2"))

在我回答这个问题之前,我强烈建议您在Qt Designer中打开UI文件,并将对象名称从
tableWidget_2
butdown
更改为更合适的名称,因为这会让您发疯

其次,PyQt提供了一个完整的API来处理名为的数据库。您可以通过以下方式访问api:

from PyQt5.QtSql import (QSqlDatabase, QSqlQuery) #and so on.
大声喊叫。我现在回答你的问题

QtableWidget的使用非常不稳定,需要几件事情:

  • 旗子
  • 行数
  • 列计数
  • 数据(显然)
  • 要向表中插入数据,可以执行以下操作

    def add_values(self):
        self.count = self.count + 1 # this is incrementing counter
        self.tableWidget_2.insertRow(self.count)
        self.tableWidget_2.setRowCount(self.count)
        # these are the items in the database
        item = [column1, column2, column3]
        # here we are adding 3 columns from the db table to the tablewidget
        for i in range(3):
            self.tableWidget_2.setItem(self.count - 1, i, QTableWidgetItem(item[i]))
    
    但是,如果您只想将数据加载到QTableWidget中,您可以执行以下操作并在设置中调用它:

    def load_initial_data(self):
        # where c is the cursor
        self.c.execute('''SELECT * FROM table ''')
        rows = self.c.fetchall()
    
        for row in rows:
            inx = rows.index(row)
            self.tableWidget_2.insertRow(inx)
            # add more if there is more columns in the database.
            self.tableWidget_2.setItem(inx, 0, QTableWidgetItem(row[1]))
            self.tableWidget_2.setItem(inx, 1, QTableWidgetItem(row[2]))
            self.tableWidget_2.setItem(inx, 2, QTableWidgetItem(row[3]))
    

    一个小时以来,我们一直在努力实现这一功能,但一直未能实现,因为它不显示gui,也不会出错,您能提供更多详细信息吗?我是个新手,所以我的知识水平很低。@RichardD'Freitas。当然没问题。我可能需要10分钟来提供一个示例,不过~我现在将更新代码。好的,我制作了一个示例,然后使用生成的UI代码运行它。它不起作用,因为您尚未创建任何列或行。返回Qt设计器,双击tableWidget创建列。您的代码显示的是
    self.tableWidget_2.setColumnCount(0)
    ,这意味着您在表中没有要显示的列!哦,我不知道我必须这么做!我以为它只会占用表、列和行中的所有数据以及所有内容,现在就可以这样做,并返回给您!我今晚就要结束了。然而,我也做了一些实验。有关完整的代码,请参阅此要点:。另请参见图片。