python数据库gui_Python PyQT4简单的数据库GUI

我制作了一个非常简单的

python脚本,将sqlite3数据库读入QtTableWidget.

import sqlite3 as db

from PyQt4 import QtCore, QtGui

import sys

con = db.connect('results.db', isolation_level=None)

cur = con.cursor()

cur.execute("SELECT * FROM Results")

all_data = cur.fetchall()

class UiDialog(object):

def setupUi(self, datadb):

datadb.setObjectName("Dialog")

datadb.resize(404, 304)

datadb.setWindowTitle("Database results")

sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)

sizePolicy.setHorizontalStretch(0)

sizePolicy.setVerticalStretch(0)

sizePolicy.setHeightForWidth(datadb.sizePolicy().hasHeightForWidth())

datadb.setSizePolicy(sizePolicy)

datadb.setMinimumSize(QtCore.QSize(404, 304))

datadb.setMaximumSize(QtCore.QSize(404, 304))

self.table = QtGui.QTableWidget(datadb)

self.table.setGeometry(QtCore.QRect(2, 2, 400, 261))

self.table.setObjectName("table")

self.show = QtGui.QPushButton(datadb)

self.show.setGeometry(QtCore.QRect(2, 270, 400, 31))

self.show.setObjectName("show")

self.show.setText("Show results")

QtCore.QObject.connect(self.show, QtCore.SIGNAL("clicked()"), self.populate)

QtCore.QMetaObject.connectSlotsByName(datadb)

def populate(self):

self.table.setRowCount(len(all_data))

self.table.setColumnCount(4)

self.table.setHorizontalHeaderLabels(['Number', 'Keys', 'Time', 'Tries'])

for i, item in enumerate(all_data):

number = QtGui.QTableWidgetItem(str(item[0]))

keys = QtGui.QTableWidgetItem(item[1])

time = QtGui.QTableWidgetItem(str(item[2]))

tries = QtGui.QTableWidgetItem(str(item[3]))

self.table.setItem(i, 0, number)

self.table.setItem(i, 1, keys)

self.table.setItem(i, 2, time)

self.table.setItem(i, 3, tries)

if __name__ == "__main__":

app = QtGui.QApplication(sys.argv)

main_conf = QtGui.QDialog()

ui = UiDialog()

ui.setupUi(main_conf)

main_conf.show()

ret = app.exec_()

sys.exit(ret)

它工作正常.我现在的问题是:

当我将字段编辑到QtableWidget(并按ENTER完成编辑)以自动更新数据库时,有什么办法吗?

非常感谢你宝贵的时间!

最佳答案 我没有测试数据库部分,因为我没有运行数据库服务器.但这种逻辑应该有效.

import sqlite3 as db

from PyQt4 import QtCore, QtGui

import sys

con = db.connect('results.db', isolation_level=None)

cur = con.cursor()

cur.execute("SELECT * FROM Results")

all_data = cur.fetchall()

class UiDialog(object):

def setupUi(self, datadb):

datadb.setObjectName("Dialog")

datadb.resize(404, 304)

datadb.setWindowTitle("Database results")

sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)

sizePolicy.setHorizontalStretch(0)

sizePolicy.setVerticalStretch(0)

sizePolicy.setHeightForWidth(datadb.sizePolicy().hasHeightForWidth())

datadb.setSizePolicy(sizePolicy)

datadb.setMinimumSize(QtCore.QSize(404, 304))

datadb.setMaximumSize(QtCore.QSize(404, 304))

self.table = QtGui.QTableWidget(datadb)

self.table.setGeometry(QtCore.QRect(2, 2, 400, 261))

self.table.setObjectName("table")

self.show = QtGui.QPushButton(datadb)

self.show.setGeometry(QtCore.QRect(2, 270, 400, 31))

self.show.setObjectName("show")

self.show.setText("Show results")

QtCore.QObject.connect(self.show, QtCore.SIGNAL("clicked()"), self.populate)

QtCore.QMetaObject.connectSlotsByName(datadb)

self.table.itemChanged.connect(self.updateDB)

def populate(self):

self.table.blockSignals(True)

#all_data = [["1","2","3","4"],["1","2","3","4"],["1","2","3","4"],["1","2","3","4"]]

self.table.setRowCount(len(all_data))

self.table.setColumnCount(4)

self.table.setHorizontalHeaderLabels(['Number', 'Keys', 'Time', 'Tries'])

for i, item in enumerate(all_data):

number = QtGui.QTableWidgetItem(str(item[0]))

#if we need old data then

number.setData(QtCore.Qt.UserRole,QtCore.QVariant(str(str(item[0]))))

keys = QtGui.QTableWidgetItem(item[1])

keys.setData(QtCore.Qt.UserRole,QtCore.QVariant(str(str(item[1]))))

time = QtGui.QTableWidgetItem(str(item[2]))

time.setData(QtCore.Qt.UserRole,QtCore.QVariant(str(str(item[2]))))

tries = QtGui.QTableWidgetItem(str(item[3]))

tries.setData(QtCore.Qt.UserRole,QtCore.QVariant(str(str(item[3]))))

self.table.setItem(i, 0, number)

self.table.setItem(i, 1, keys)

self.table.setItem(i, 2, time)

self.table.setItem(i, 3, tries)

self.table.blockSignals(False)

def updateDB(self, itmWid):

updatedVal = str(itmWid.text())

oldValue = itmWid.data(QtCore.Qt.UserRole).toString()

with con:

cur.execute("UPDATE Results SET Number='%s' WHERE Number='%s'" % (updatedVal, oldValue))

if __name__ == "__main__":

app = QtGui.QApplication(sys.argv)

main_conf = QtGui.QDialog()

ui = UiDialog()

ui.setupUi(main_conf)

main_conf.show()

ret = app.exec_()

sys.exit(ret)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值