Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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 导出QTABLEWIDGET';将数据(列、行、所有内容等)转换为SQLITE3_Python_Sqlite_Pyqt5_Qtablewidget - Fatal编程技术网

Python 导出QTABLEWIDGET';将数据(列、行、所有内容等)转换为SQLITE3

Python 导出QTABLEWIDGET';将数据(列、行、所有内容等)转换为SQLITE3,python,sqlite,pyqt5,qtablewidget,Python,Sqlite,Pyqt5,Qtablewidget,将用户填充的数据导出到db文件。(db文件不存在,因此SQLITE3将在引用的目录中创建它。) 以下是我使用的代码: self.CreateDatasetButton.connect(self.createDS) def CreateDS(self): self.proceed = QtWidgets.QMessageBox.question( self, 'Information', 'Have you Verified y

将用户填充的数据导出到db文件。(db文件不存在,因此SQLITE3将在引用的目录中创建它。)

以下是我使用的代码:

    self.CreateDatasetButton.connect(self.createDS)

def CreateDS(self):
    self.proceed = QtWidgets.QMessageBox.question(
        self, 
        'Information', 
        'Have you Verified your Data?',
        QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
    if self.proceed == QtWidgets.QMessageBox.Yes:
        self.showDialog()
    else:
        pass

def showDialog(self):
    self.text, ok = QtWidgets.QInputDialog.getText(self, 'Almost Done !', 
        '\n\nname your file :')
    if ok:
        self.Createdb()

def Createdb(self):
    conn = sqlite3.connect('__Datasets__/%s.db' %(self.text))
    # problema here
    conn.close()
    self.app_statusbar.showMessage('%s is created' %(self.text()))

使用pandas任务很简单,解决方案是将QTableWidget转换为数据帧,然后将其导出:

import sqlite3
import pandas as pd
from PyQt5 import QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self.table_widget = QtWidgets.QTableWidget()
        self.create_data()
        button = QtWidgets.QPushButton("Export")
        button.clicked.connect(self.on_clicked)

        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(self.table_widget)
        lay.addWidget(button)

    def create_data(self):
        self.table_widget.setColumnCount(4)
        self.table_widget.setRowCount(10)
        self.table_widget.setHorizontalHeaderLabels(["A", "B", "C", "D"])

        import random
        for i in range(self.table_widget.rowCount()):
            for j in range(self.table_widget.columnCount()):
                it = QtWidgets.QTableWidgetItem(str(random.randint(0, 100)))
                self.table_widget.setItem(i, j, it)

    def on_clicked(self):
        proceed = QtWidgets.QMessageBox.question(self, 
            'Information', 
            'Have you Verified your Data?',
            QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
        if proceed != QtWidgets.QMessageBox.Yes:
            return

        filename, ok = QtWidgets.QInputDialog.getText(self, 'Almost Done !', 'name your file :')
        if ok:
            self.saveToDb(filename, "table_name")

    def saveToDb(self, db_filename, tablename):
        d = {}
        for i in range(self.table_widget.columnCount()):
            l = []
            for j in range(self.table_widget.rowCount()):
                it = self.table_widget.item(j, i)
                l.append(it.text() if it is not None else "")
            h_item = self.table_widget.horizontalHeaderItem(i)
            n_column = str(i) if h_item is None else h_item.text()
            d[n_column] = l

        df = pd.DataFrame(data=d)
        engine = sqlite3.connect(db_filename)
        df.to_sql(tablename, con=engine)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

ok,self.text=qtwidts.QInputDialog.getText(self,“差不多完成!”,“\n\n将文件命名:”)
更改为
self.text,ok=qtwidts.QInputDialog.getText(self,“差不多完成!”,“\n\n将文件命名:”)
有效,解决了1个问题。非常感谢。everything==QTableWidget内的所有信息。(标题、项目,…)与pandas的逻辑相同,例如,标题是键,项目是值。示例_dict={“header name”:[item1,item2,item3,…],}我知道我有一个通信问题,所以请耐心等待please@user10567350最好分析解决方案,如果您不理解,可以向我询问具体问题,在下面的注释中,我将尝试以一般方式解释它。@user10567350策略是获取列表字典,其中键是列的名称,列表中的值与每列下的项目关联。为了获取QTableWidgetItem,我使用了一个item,但是在一般情况下,items可以为null,因此我检查,如果是,那么我保留一个空字符串,如果不是,我保存文本。创建列表字典后,创建一个数据框并将其导出到sqlite(这两个步骤我认为您应该知道,因为您提到了熊猫)@user10567350还有其他问题吗?如果我的答案对你有帮助,别忘了把它标为正确的,如果你不知道怎么做,复习一下,这是最好的感谢方式。是的,我有一个问题。为什么QinputDialog的返回是空的?@user10567350为什么说QinputDialog是空的?