又是一天時間(又沒做大作業)。今天的心路歷程:(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/
我明天一定做大作業 :-)