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


    又是一天时间(又没做大作业)。今天的心路历程:(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/

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

  • 相关阅读:
    mysql递归层次查询
    mybatis+spring事务
    浅谈数据库表的分割技术(水平、垂直、库表散列)(引用)
    高并发的常见思维
    jee websocket搭建总结
    hibernate 多表查询
    jsp作为服务端,ajax请求回应
    排序(2)--希尔,快速,归并
    排序(1)--冒泡,插入,选择
    Java反射基础
  • 原文地址:https://www.cnblogs.com/hsh17/p/10977288.html
Copyright © 2020-2023  润新知