0

スプリッター付きのウィンドウがあり、2 つのフレーム内に 2 つの異なるテーブルがあり、製品タイプは製品と関係があり、GUI は正常に動作しますが、製品タイプの名前を変更しても更新されません。製品テーブル、それはなぜですか? しかし、再起動すると変更が行われますか? pyqt モデルにデータベースの変更を強制的にチェックさせる方法はありますか?

def initUI(self):

        self.connectDb()

        mainlayout = QtGui.QVBoxLayout(self)
        self.mode = QtGui.QAbstractItemView.SingleSelection

        self.topleft = QtGui.QFrame(self)
        self.topleft.setFrameShape(QtGui.QFrame.StyledPanel)
        self.topleftfill()
        self.topright = QtGui.QFrame(self)
        self.topright.setFrameShape(QtGui.QFrame.StyledPanel)
        self.toprightfill()

        splittertop = QtGui.QSplitter(QtCore.Qt.Horizontal)
        splittertop.addWidget(self.topleft)
        splittertop.addWidget(self.topright)
        mainlayout.addWidget(splittertop)
        self.setLayout(mainlayout)

def topleftfill(self):
    layout = QtGui.QVBoxLayout(self)
    model = QtSql.QSqlRelationalTableModel()
    model.setTable("Product")
    model.setRelation(6, QtSql.QSqlRelation("ProductType","ProductTypeID","Type"))
    model.select()
    model.setHeaderData(0, QtCore.Qt.Horizontal, "Product ID")
    model.setHeaderData(1, QtCore.Qt.Horizontal, "Product Name")
    model.setHeaderData(2, QtCore.Qt.Horizontal, "In Stock ")
    model.setHeaderData(3, QtCore.Qt.Horizontal, "Expiry Date")
    model.setHeaderData(4, QtCore.Qt.Horizontal, "Stock Alert")
    model.setHeaderData(5, QtCore.Qt.Horizontal, "Price")
    model.setHeaderData(6, QtCore.Qt.Horizontal, "Product Type")
    edit = QtSql.QSqlTableModel.OnFieldChange
    model.setEditStrategy(edit)
    view = QtGui.QTableView()
    view.setModel(model)
    view.setSelectionMode(self.mode)
    view.setItemDelegate(QtSql.QSqlRelationalDelegate(view))
    layout.addWidget(view)
    self.topleft.setLayout(layout)

def toprightfill(self):
    layout = QtGui.QVBoxLayout(self)
    model = QtSql.QSqlRelationalTableModel()
    model.setTable("ProductType")
    model.select()
    model.setHeaderData(0, QtCore.Qt.Horizontal, "Product Type ID")
    model.setHeaderData(1, QtCore.Qt.Horizontal, "Product Type")
    edit = QtSql.QSqlTableModel.OnFieldChange
    model.setEditStrategy(edit)
    view = QtGui.QTableView()
    view.setModel(model)
    view.setSelectionMode(self.mode)
    layout.addWidget(view)
    self.topright.setLayout(layout)


def connectDb(self):
    name = 'PostOffice.db'
    initDb.setup_database(name)
    db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
    db.setDatabaseName(name)
    if not db.open():
        print("Cannot Connect")
        return False    
4

1 に答える 1

3

問題は、編集戦略を使用している場合に変更を編集するためにボタンが押されたOnManualSubmit後、関数を呼び出してテーブルを再作成する必要があることです。model.select()そうしないと、プログラムを再起動するまでプログラムは古いモデルを使用します

于 2015-01-10T18:41:55.820 に答える