0

SQLite db への送信プッシュボタンをクリックすると、複数の QLineEdit オブジェクトを更新しようとしています。また、db を表示する QTableView もあります。送信ボタンはデータベースに行を追加しますが、保存はしません。新しく作成された行に行の編集を追加したいと思います。

import sys
from testdbtableform import *
from PyQt4 import *
from PyQt4 import QtSql, QtGui, QtCore
from PyQt4.QtSql import (QSqlDatabase, QSqlQuery, QSqlRelation,
        QSqlRelationalDelegate, QSqlRelationalTableModel)


def createConnection():
    db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
    db.setDatabaseName('demomap.db')
    db.open()
    print (db.lastError().text())
    return True

class MyForm(QtGui.QDialog):

    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.model = QtSql.QSqlTableModel(self)
        self.model.setTable("userlist")
        self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
        self.model.select()
        self.ui.tableView.setModel(self.model)
        QtCore.QObject.connect(self.ui.Submit, QtCore.SIGNAL('clicked()'), self.dbinput)

    def dbinput(self):
        row = self.model.rowCount()
        self.model.insertRow(row)
        self.model.submitAll()

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    if not createConnection():
        sys.exit(1)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())

ユーザー名とメールの列に入力する 2 行の編集があります。それを正しく使用する方法の例を得ることができれば、残りの入力を理解することができます. 私はpythonとpyqtにかなり慣れていません。pyside に切り替える必要がある場合は、喜んで切り替えます。

4

2 に答える 2

0
import sys
from testdbtableform import *
from PyQt4 import QtSql, QtGui, QtCore, QtSql

def createConnection():
    db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
    db.setDatabaseName('demomap.db')
    if db.open():
        return True
    else:
        print db.lastError().text()
        return False

class MyForm(QtGui.QDialog):

    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.model = QtSql.QSqlTableModel(self)
        self.model.setTable("userlist")
        self.model.setEditStrategy(2)
        self.model.select()
        self.ui.tableView.setModel(self.model)
        self.ui.Submit.clicked.connect(self.dbinput)

    def dbinput(self):
        self.model.insertRow(-1)
        text = self.ui.lineEdit.text()
        if self.model.setData(self.model.index(-1, 0), text):
            self.model.submitAll()
        else:
            print "There was a problem setting the data."

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    if not createConnection():
        sys.exit(1)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())

dbinput を変更して、それがどのように機能するかを示し、ヘルプが必要なコードの他のいくつかのビットもクリーンアップしました。

これはほとんどの場合うまくいくはずですが、db ファイルと ui ファイルがないとテストできません。

ドキュメントを読んで理解するのにもう少し時間を費やす必要があるようです。http://pyqt.sourceforge.net/Docs/PyQt4/classes.html

頑張ってください。

于 2013-06-10T18:48:39.310 に答える
0

データベースにデータをコミットする必要があります。OnManualSubmit を使用すると、データがモデルにキャッシュされます。

self.model.submitAll()多分?

于 2013-06-08T20:20:32.230 に答える