python3+PyQt5 数据库编程--增删改实例

时间:2022-09-05 10:15:33

本文通过python3+pyqt5改写实现了python qt gui 编程变成15章的excise例子。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env python3
import os
import sys
from pyqt5.qtcore import (qfile, qvariant, qt)
from pyqt5.qtwidgets import (qapplication, qdialog, qdialogbuttonbox, qmenu,
    qmessagebox, qtableview, qvboxlayout)
from pyqt5.qtsql import (qsqldatabase, qsqlquery, qsqltablemodel)
 
mac = true
try:
  from pyqt5.qtgui import qt_mac_set_native_menubar
except importerror:
  mac = false
 
id, category, shortdesc, longdesc = range(4)
 
 
class referencedatadlg(qdialog):
 
  def __init__(self, parent=none):
    super(referencedatadlg, self).__init__(parent)
 
    self.model = qsqltablemodel(self)
    self.model.settable("reference")
    self.model.setsort(id, qt.ascendingorder)
    self.model.setheaderdata(id, qt.horizontal, "id")
    self.model.setheaderdata(category, qt.horizontal,"category")
    self.model.setheaderdata(shortdesc, qt.horizontal,"short desc.")
    self.model.setheaderdata(longdesc, qt.horizontal,"long desc.")
    self.model.select()
 
    self.view = qtableview()
    self.view.setmodel(self.model)
    self.view.setselectionmode(qtableview.singleselection)
    self.view.setselectionbehavior(qtableview.selectrows)
    self.view.setcolumnhidden(id, true)
    self.view.resizecolumnstocontents()
 
    buttonbox = qdialogbuttonbox()
    addbutton = buttonbox.addbutton("&add",
        qdialogbuttonbox.actionrole)
    deletebutton = buttonbox.addbutton("&delete",
        qdialogbuttonbox.actionrole)
    sortbutton = buttonbox.addbutton("&sort",
        qdialogbuttonbox.actionrole)
    if not mac:
      addbutton.setfocuspolicy(qt.nofocus)
      deletebutton.setfocuspolicy(qt.nofocus)
      sortbutton.setfocuspolicy(qt.nofocus)
 
    menu = qmenu(self)
    sortbycategoryaction = menu.addaction("sort by &category")
    sortbydescriptionaction = menu.addaction("sort by &description")
    sortbyidaction = menu.addaction("sort by &id")
    sortbutton.setmenu(menu)
    closebutton = buttonbox.addbutton(qdialogbuttonbox.close)
 
    layout = qvboxlayout()
    layout.addwidget(self.view)
    layout.addwidget(buttonbox)
    self.setlayout(layout)
 
    addbutton.clicked.connect(self.addrecord)
    deletebutton.clicked.connect(self.deleterecord)
    sortbycategoryaction.triggered.connect(lambda:self.sort(category))
    sortbydescriptionaction.triggered.connect(lambda:self.sort(shortdesc))
    sortbyidaction.triggered.connect(lambda:self.sort(id))
    closebutton.clicked.connect(self.accept)
    self.setwindowtitle("reference data")
 
 
  def addrecord(self):
    row = self.model.rowcount()
    self.model.insertrow(row)
    index = self.model.index(row, category)
    self.view.setcurrentindex(index)
    self.view.edit(index)
 
 
  def deleterecord(self):
    index = self.view.currentindex()
    if not index.isvalid():
      return
    record = self.model.record(index.row())
    category = record.value(category)
    desc = record.value(shortdesc)
    if (qmessagebox.question(self, "reference data",
        ("delete {0} from category {1}?"
        .format(desc,category)),
        qmessagebox.yes|qmessagebox.no) ==
        qmessagebox.no):
      return
    self.model.removerow(index.row())
    self.model.submitall()
    self.model.select()
 
 
  def sort(self, column):
    self.model.setsort(column, qt.ascendingorder)
    self.model.select()
 
 
def main():
  app = qapplication(sys.argv)
 
  filename = os.path.join(os.path.dirname(__file__), "reference.db")
  create = not qfile.exists(filename)
 
  db = qsqldatabase.adddatabase("qsqlite")
  db.setdatabasename(filename)
  if not db.open():
    qmessagebox.warning(none, "reference data",
      "database error: {0}".format(db.lasterror().text()))
    sys.exit(1)
 
  if create:
    query = qsqlquery()
    query.exec_("""create table reference (
        id integer primary key autoincrement unique not null,
        category varchar(30) not null,
        shortdesc varchar(20) not null,
        longdesc varchar(80))""")
 
  form = referencedatadlg()
  form.show()
  sys.exit(app.exec_())
 
main()

运行结果:

python3+PyQt5 数据库编程--增删改实例

以上这篇python3+pyqt5 数据库编程--增删改实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/xiaoyangyang20/article/details/70240690