欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PyQt5(2)、垃圾分类小程序(2)——初代窗口程序可执行文件

程序员文章站 2022-06-22 21:17:24
垃圾分类.exe可执行文件。包含内容pyqt5的输入文字、接受文字、窗口组件排版,连接sqlite5数据库后的操作。包含:QLineEdit、QInputDialog、QGridLayout、QSqlDatabase、QSqlQuery…… ......

又是一天时间(又没做大作业)。今天的心路历程:(1)前端后端怎么连接?(2)后端数据库插数据(3)完全没用上之前的字典反查法(4)突然发现面向对象编程其实很好用,甚至越用越上瘾(5)qlineedit、qinputdialog、qgridlayout(6)用clicked.connect()触发“事件”(7)设计函数连接数据库,qtsql(8)qsqldatabase、qsqlquery这两个小东西可真让我踩了不少的坑(9)几句踩到类的关键代码 query = qsqlquery() “实例化”、 query.prepare(f'select rclassification from rub_cl where rname="{text}"') 双引号极致关键、 query.next() 的意义(10)最后偷懒用pyinstaller包装为.exe就算草草了事了hh。注意因为需要附带数据库所以要用 -d 方式。

垃圾分类小程序大概就告一段落了。虽然还有很多可以优化的地方,也还有很多idea在我脑海里,但我不想做了至少现在是懒了(掩面笑)。昨天看到了一个已完成的微信小程序,做得真的非常好,感觉已经到了我能想到的功能极致了(微信搜索小程序:“生活垃圾怎么分”)。真的很厉害,我还有很长的路要走。

 

 1 import sys, sqlite3
 2 #from pyqt5.qtwidgets import (qwidget, qpushbutton, qlabel, qlineedit, qinputdialog, qapplication, qgridlayout)
 3 from pyqt5.qtwidgets import *
 4 from pyqt5 import qtsql
 5 from pyqt5.qtsql import *
 6 #from pyqt5.qtsql import qsqldatabase, qsqlquery
 7 
 8 class example(qwidget):
 9     def __init__(self):
10         super().__init__()
11         self.initui()
12 
13     def initui(self):
14         self.btn = qpushbutton('start',self)#按钮
15         self.btn.clicked.connect(self.showdialog)
16 
17         self.le = qlineedit(self)#单行编辑框
18 
19         text = qlabel('是')
20 
21         self.answer = qlineedit(self)
22 
23         grid = qgridlayout()
24         grid.setspacing(10)
25 
26         grid.addwidget(self.btn,1,0,1,3)#后两个参数可以设置行列跨度。这里的行列跨度是一行三列。
27         grid.addwidget(self.le,2,0)
28         grid.addwidget(text,2,1)
29         grid.addwidget(self.answer,2,2)
30 
31         self.setlayout(grid)
32 
33         self.setgeometry(300,300,350,350)
34         self.setwindowtitle('input dialog')
35         self.show()
36 
37     def showdialog(self):
38         global text
39         text, ok = qinputdialog.gettext(self, 'input dialog', 'enter the rubbish:')
40         if ok:
41             self.le.settext(str(text))
42             self.showanswer()
43 
44     def showanswer(self):
45         db = qsqldatabase.adddatabase('qsqlite')
46         db.setdatabasename('rubbish.db')
47         db.open()
48         query = qsqlquery()
49         query.prepare(f'select rclassification from rub_cl where rname="{text}"')#双引号是关键
50         query.exec()
51         #query.next()
52         #print(query.value(0))
53         if not query.exec():
54             query.lasterror()#返回最后一个报错信息
55         else:
56             query.next()
57             '''
58             qsqlquery返回的数据集,record是停在第一条记录之前的。
59             所以,在获得数据集后,必须执行next()或first()到第一条记录,
60             这时候record才是有效的。
61             '''
62             answertoprint = query.value(0)
63             self.answer.settext(str(answertoprint))
64         
65         
66 
67 if __name__ == '__main__':
68 
69     app = qapplication(sys.argv)
70     ex = example()
71     sys.exit(app.exec_())

pyinstaller的命令行代码:

cd blablablablabla
pyinstaller -d(-f) -i icon.ico rubbish_classification.py

再补几个网址怕我以后忘了:

ico图标:https://www.easyicon.net/

qt documentation:https://doc.qt.io/qt-5/qsqlquery.html

qmessagebox类 doc:http://www.kuqin.com/qtdocument/qmessagebox.html

devdocs api documentation(思否的开发者文档,我也不知道能干嘛先存着再说):https://docs.segmentfault.com/

 

 

 

 

我明天一定做大作业 :-)