PyQt GuiでTableViewを更新しようとしています.QPSQLデータベースに新しいエントリが追加されるたびに、Gui内のTableViewで更新されます。 現在のところ、接続はうまく機能し、データベースに正しく接続していて、名前、電話番号、およびアドレス列を持つ電話帳だけのテーブルに何が表示されているかを示します。問題は、Postgrese Sqlデータベースに新しい行を挿入すると、GUIを閉じてコードを再実行しない限り、TableViewで更新されません。 私は何かがPostrgese SQLデータベースに追加された場合、プッシュボタンや何もせずに自動的に行うように、TableViewを更新する方法を探しています。どんな助けもありがとうございます。事前に感謝します。新しいエントリがデータベースに追加されたときにPyQtのTableViewを更新するには?
私のコードのセクションも示します。
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(400, 300)
self.buttonBox = QtGui.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(30, 240, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
self.tableView = QtGui.QTableView(Dialog)
self.tableView.setGeometry(QtCore.QRect(20, 50, 256, 192))
self.tableView.setObjectName(_fromUtf8("tableView"))
###############################データベース
db = QSqlDatabase.addDatabase("QPSQL") # Database typed set to QPSQL for postgres use
db.setDatabaseName("postgres") # This field should stay as postgres
db.setUserName("postgres") # This field should stay as postgres
db.setPassword("pass") # This field is for your personal password you used for the postgres install
db.setHostName("localhost") # This field should stay as localhost
if not db.open():
QtGui.QMessageBox.critical(None, QtGui.qApp.tr("Cannot open database"),
QtGui.qApp.tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information "
"how to build it.\n\n" "Click Cancel to exit."),
QtGui.QMessageBox.Cancel)
return False
ok = db.open()
の接続は##### ##########################メインGUIでテーブルビューにデータベーステーブルを追加 #
model = QSqlTableModel()
query = QSqlQuery("SELECT * FROM PHONEBOOK", db)
model.setEditStrategy(QSqlTableModel.OnFieldChange)
model.setQuery(query)
model.submitAll()
self.tableView.setModel(model)
self.tableView.show()
model.select()
#
うーん、面白いアドバイス。そうすれば、何かがデータベースに追加されたという通知や、データベースへの変更に基づいてGUIのテーブルを物理的に更新することになります。私が作業しているデータベースは、1秒ごとに行と列の新しい情報で更新されるリモートデータベースになります。ですから、データベースの新しいエントリを自動的に取得してGUIのテーブルに書き込むには、PyQtのGUIが必要です。それは可能でしょうか? – Shayan
自動ではありません。私は答えを広げた。 – Schollii
PyQtで自動更新メソッドを実装する方法を知っていますか?ドキュメントを見ましたが、Pythonスクリプト内でその作業を行う方法はわかりません。 – Shayan