基於PyQt5的GUI開發流程:
- 將一個窗口控件拖入窗口中並放在預設的大致位置。
- 對於要用代碼引用的窗口控件,應指定一個名字:對於需要微調的窗口控件,可以設置其對應屬性。
- 重複步驟1和2,直到所需的所有窗口控件都放在窗口中。
- 根據自己預設的界面,爲便於佈局可以添加Vertical Spacer、Horizontal Spacer、Horizontal Line、Vertical Line控件隔開。
- 選擇需佈局的窗口控件,合理使用佈局管理器對窗口進行佈局。
- 設置好各窗口控件屬性及窗口布局方式。
- 佈局好所有窗口部件後在主窗口設置佈局方式,保證所有控件填滿窗口。
- 爲窗口設置buddy關係(該步爲可選步驟,設置buddy關係時,設置其中一個控件的快捷鍵,當觸發快捷鍵時光標可快速定位至其夥伴關係控件。主要應用在label與edit控件之間,便於快速切換編輯)
- 設置按鍵次序即Tab鍵次序(強迫症患者福音,爲便於編寫代碼,可觀察對象查看窗口並在利用相關工具(比如億圖的思維導圖、Visio)繪製出各控件之間的邏輯)
- 建立一些簡單的信號與槽連接
- Ctrl+R預覽窗口,檢查所有內容是否按預設工作
- 設置窗口對象名,保存
- 利用Pycharm或者Eric等工具或者在命令行輸入python -m PyQt5.uic.pyuic yourProgram.ui -o yourProgram.py編譯窗口。
- 進行正常的代碼編輯工作。
開發環境:
Windows7+Python3.6.1+Pycharm2017
PyQt編寫數據庫管理系統GUI過程中的問題及解決方法:
1、數據庫連接問題
在此使用mysql數據庫進行數據管理,期間使用第三方庫pymssql未成功,而mysq-python僅支持Python2.7以下版本,最後選用PyMySQL庫成功連接。代碼如下
host = "127.0.0.1"
user = "root"
passwd = "yourpassword"
db = 'yoursql'
conn = pymysql.connect(host=host, user=user, passwd=passwd, db=db, port=3306, charset='utf8')
cursor = conn.cursor()
cursor.execute('sql語句')
conn.commit() # 提交當前事務
cursor.close()
2、comboBox控件使用
self.comboBox = QtWidgets.QComboBox() #獲取當前控件內容 self.comboBox.currentText()
3、dateEdit控件使用
self.dateEdit= QtWidgets.QDateEdit()
設置彈出日曆窗口
self.dateEdit.setCalendarPopup(True)
# 設置最小及最大日期
self.dateEdit.setMinimumDate(QtCore.QDate.currentDate().addYears(-40))
self.dateEdit.setMaximumDate(QtCore.QDate.currentDate())
# 設置默認顯示時間
self.dateEdit.setDate(QtCore.QDate.currentDate().addYears(-40))
#格式化輸出時間
self.dateEdit.date().toString("yyyy-MM-dd")
4、lineEdit控件使用
self.lineEdit = QtWidgets.QLineEdit()
#獲取文本編輯框內容
self.lineEdit.text()
5、tableWidget控件使用
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget) #設置表格的編輯規則 self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.AllEditTriggers)
選項 | 值 | 描述 |
---|---|---|
QAbstractItemView.NoEditTriggers | 0 | 不能對錶格內容進行修改 |
QAbstractItemView.CurrentChanged | 1 | 任何時候都能對單元格進行修改 |
QAbstractItemView.DoubleClicked | 2 | 雙擊單元格 |
QAbstractItemView.SlelectedClicked | 4 | 單擊選中的內容 |
QAbstractItemView.EditKeyPressed | 8 | 當修改鍵被按下時修改單元格 |
QAbstractItemView.AnyKeyPressed | 16 | 按任意鍵修改單元格 |
QAbstractItemView.AllEditTriggers | 31 | 包括以上可修改的所有條件 |
#取單元格內容時需首先判斷單元格是否爲空 if self.tableWidget.item(i, j) == None: do something else: self.tableWidget.item(i, j).text()
未完待續。。。