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 方式。html

垃圾分類小程序大概就告一段落了。雖然還有不少能夠優化的地方,也還有不少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的命令行代碼:sql

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.htmlsegmentfault

DevDocs API Documentation(思否的開發者文檔,我也不知道能幹嗎先存着再說):https://docs.segmentfault.com/後端

 

 

 

 

我明天必定作大做業 :-)微信小程序

相關文章
相關標籤/搜索