又是一天时间(又没做大作业)。今天的心路历程:(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在我脑海里,但我不想做了至少现在是懒了(掩面笑)。昨天看到了一个已完成的微信小程序,做得真的非常好,感觉已经到了我能想到的功能极致了(微信搜索小程序:“生活垃圾怎么分”)。真的很厉害,我还有很长的路要走。

 import sys, sqlite3
#from PyQt5.QtWidgets import (QWidget, QPushButton, QLabel, QLineEdit, QInputDialog, QApplication, QGridLayout)
from PyQt5.QtWidgets import *
from PyQt5 import QtSql
from PyQt5.QtSql import *
#from PyQt5.QtSql import QSqlDatabase, QSqlQuery class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.btn = QPushButton('Start',self)#按钮
self.btn.clicked.connect(self.showDialog) self.le = QLineEdit(self)#单行编辑框 text = QLabel('是') self.answer = QLineEdit(self) grid = QGridLayout()
grid.setSpacing(10) grid.addWidget(self.btn,1,0,1,3)#后两个参数可以设置行列跨度。这里的行列跨度是一行三列。
grid.addWidget(self.le,2,0)
grid.addWidget(text,2,1)
grid.addWidget(self.answer,2,2) self.setLayout(grid) self.setGeometry(300,300,350,350)
self.setWindowTitle('Input dialog')
self.show() def showDialog(self):
global text
text, ok = QInputDialog.getText(self, 'Input Dialog', 'Enter the rubbish:')
if ok:
self.le.setText(str(text))
self.showAnswer() def showAnswer(self):
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('Rubbish.db')
db.open()
query = QSqlQuery()
query.prepare(f'select Rclassification from Rub_cl where Rname="{text}"')#双引号是关键
query.exec()
#query.next()
#print(query.value(0))
if not query.exec():
query.lastError()#返回最后一个报错信息
else:
query.next()
'''
QSqlQuery返回的数据集,record是停在第一条记录之前的。
所以,在获得数据集后,必须执行next()或first()到第一条记录,
这时候record才是有效的。
'''
answertoprint = query.value(0)
self.answer.setText(str(answertoprint)) if __name__ == '__main__': app = QApplication(sys.argv)
ex = Example()
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/

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

PyQt5(2)、垃圾分类小程序(2)——初代窗口程序可执行文件的更多相关文章

  1. CS代码代写, 程序代写, java代写, python代写, c/c++代写,csdaixie,daixie,作业代写,代写

    互联网一线工程师程序代写 微信联系 当天完成特色: 互联网一线工程师 24-48小时完成.用心代写/辅导/帮助客户CS作业. 客户反馈与评价 服务质量:保证honor code,代码原创.参考课程sl ...

  2. 如何优化cocos2d程序的内存使用和程序大小

    在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...

  3. 如何优化cocos2d程序的内存使用和程序大小:第一部分

    译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...

  4. 如何优化cocos2d程序的内存使用和程序大小:第一部分_(转)

    译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...

  5. 优化cocos2d/x程序的内存使用和程序大小

    本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/1043.html ☞ ...

  6. 怎样优化cocos2d/x程序的内存使用和程序大小

    再次感谢原创者:Steffen Itterheim.原创博客原文地址: http://www.learn-cocos2d.com/2012/11/optimize-memory-usage-bundl ...

  7. 使用 SailingEase WinForm 框架构建复合式应用程序(插件式应用程序)

    对于一些较小的项目,具备一定经验的开发人员应该能够设计和构建出便于进行维护和扩展的应用程序.但是,随着功能模块数量(以及开发维护这些部件的人员)的不断增加,对项目实施控制的难度开始呈指数级增长. Sa ...

  8. Cocos2dx集成于windows桌面窗口程序的步骤

    2D游戏需要做编辑器,而编辑器总是希望可以复用游戏中的逻辑来运行场景试看效果. 对于cocos2dx开发的程序,这个需求可以描述为: 实现一种方法,在桌面窗口程序中的某个控件上显示cocos2dx的场 ...

  9. 使用node-webkit开发exe窗口程序

    首发:个人博客,更新&纠错&回复 ====关于原生程序与壳中程序的议论begin==== 在所有用户windows机器上都能直接跑的程序,如果不采用微软系的语言,如VB,C++,C#等 ...

随机推荐

  1. jQuery position() 源码解读

    position的代码比较简单... position: function() { if ( !this[ 0 ] ) { return; } var offsetParent, offset, el ...

  2. webstock学习

    1.WebSocket是HTML5中出出现的新技术,有着web TCP之称,这也是为了适应现在实时传输数据的趋势,在这之前一般采用两种方法进行实时数据交换. 轮询机制,其中又包括长轮询. ①短轮询是指 ...

  3. Aop第一节

    什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...

  4. PL/SQL 多表关联UPDATE

    假设有两个表A和B,A表字段a,b,c,d,B表字段b,e,f,两表的关联条件是字段b,现在想做个data patch,欲将B表中的字段e的值patch给A表的字段c. 有如下两种方法: 1 upda ...

  5. 《超实用的HTML代码段》阅读笔记1——HTML5自动聚焦

    在页面加载完成后自动将输入焦点定位到需要的元素,用户就可以直接在改元素中进行输入而不需要手动选择它. 通过autofocus的属性就可以指定这种自动聚焦的功能,示例代码如下: <form nam ...

  6. OpenCV中CvMat的初始化[转]

    一)cvCreateMat创建和分配数据CvCreateMat会创建CvMat,并为CvMat分配数据.cvCreateMat可以配合cvInitMatHeader来初始化CvMat对象.因为CvCr ...

  7. Objective-C Data Encapsulation

    All Objective-C programs are composed of the following two fundamental elements: Program statements ...

  8. https域名强弱校验的区别

    HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){ public boolean verify(String ...

  9. MediaRecord一些使用记录

    今天学习了MediaRecord的使用,第一次使用做个记录. MediaRecord作用是声音录制,使用步骤如下: 1.新建出音频文件代码如下: 先创建出用于存储音频文件 File dir = new ...

  10. Jenkins怎么启动和停止服务

    笔者没有把Jenkins配置到tomcat中,每次都是用命令行来启动Jenkins.但是遇到一个问题:Jenkins一直是开着的,想关闭也关闭不了.百度了一些资料,均不靠谱(必须吐槽一下百度).于是进 ...