使用 PyQT5 来做一个简易版库存管理系统(二)
生活随笔
收集整理的這篇文章主要介紹了
使用 PyQT5 来做一个简易版库存管理系统(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一篇介紹了總體要做的功能,在這一篇中,我將先做出入庫查詢、庫存查詢的功能
一、界面規劃
窗體上邊結構為索引條件,包含日期條件(開始日期至結束日期)、酒類型(下拉框)等等
窗體中部為查詢數據庫中獲取數據展示,此處控件選擇用?QTableWidget ,最后追加個導出excle的功能
二、正文
1.建窗體、設置窗體大小
class Ui_MainWindow1(QMainWindow):# 構造方法def __init__(self):super(Ui_MainWindow1, self).__init__()self.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint) # 只顯示最小化和關閉按鈕self.setupUi(self) # 初始化窗體設置def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(762, 343)2.在窗體中添加日期控件
self.dateEdit1 = QDateTimeEdit(QDateTime.currentDateTime().addMonths(-1), self.centralwidget)self.dateEdit1.setGeometry(QtCore.QRect(40, 10, 101, 21))self.dateEdit1.setDisplayFormat('yyyy-MM-dd')self.dateEdit1.setCalendarPopup(True)self.dateEdit2 = QDateTimeEdit(QDateTime.currentDateTime(), self.centralwidget)self.dateEdit2.setGeometry(QtCore.QRect(150, 10, 101, 21))self.dateEdit2.setDisplayFormat('yyyy-MM-dd')self.dateEdit2.setCalendarPopup(True)3.添加下拉框控件
self.cboxKinds = QtWidgets.QComboBox(self.centralwidget)self.cboxKinds.setGeometry(QtCore.QRect(400, 10, 69, 22))self.cboxKinds.setObjectName("cboxKinds")4.添加查詢、退出按鈕,按鈕點擊事件
self.btnQuery = QtWidgets.QPushButton(self.centralwidget)self.btnQuery.setGeometry(QtCore.QRect(649, 3, 51, 31))self.btnQuery.setObjectName("btnQuery")self.btnExit = QtWidgets.QPushButton(self.centralwidget)self.btnExit.setGeometry(QtCore.QRect(709, 3, 51, 31))self.btnExit.setObjectName("btnExit")self.btnExit.clicked.connect(MainWindow.close)self.btnQuery.clicked.connect(self.query) # 綁定查詢按鈕的單擊信號5.添加表格控件
self.tbResult = QtWidgets.QTableWidget(self.centralwidget)self.tbResult.setGeometry(QtCore.QRect(0, 40, 761, 301))self.tbResult.setObjectName("tbResult")self.tbResult.setColumnCount(6)self.tbResult.setRowCount(0)item = QtWidgets.QTableWidgetItem()self.tbResult.setHorizontalHeaderItem(0, item)item = QtWidgets.QTableWidgetItem()self.tbResult.setHorizontalHeaderItem(1, item)item = QtWidgets.QTableWidgetItem()self.tbResult.setHorizontalHeaderItem(2, item)item = QtWidgets.QTableWidgetItem()self.tbResult.setHorizontalHeaderItem(3, item)item = QtWidgets.QTableWidgetItem()self.tbResult.setHorizontalHeaderItem(4, item)item = QtWidgets.QTableWidgetItem()self.tbResult.setHorizontalHeaderItem(5, item)item = QtWidgets.QTableWidgetItem()self.tbResult.setHorizontalHeaderItem(6, item)self.tbResult.setAlternatingRowColors(True) # 使表格顏色交錯顯示self.tbResult.verticalHeader().setVisible(False) # 隱藏垂直標題6.定義方法獲取下拉框控件內容(查詢酒類商品字典表獲取)
def bindCbox(self):self.cboxKinds.addItem("所有") # 設置臺賬類別的默認首選項result = datapg.query("select goods_name from erp.goods") # 從臺賬類別中查詢數據for i in result: # 遍歷查詢結果self.cboxKinds.addItem(i[0]) # 在下拉列表中顯示臺賬類別7.查詢按鈕方法(查詢入庫單記錄表獲取數據)
def query(self):self.tbResult.setRowCount(0) # 清空表格中的所有行# stuname=self.editName.text() #kindname=self.cboxKinds.currentText() # 記錄選擇的臺賬類別strat_time=self.dateEdit1.date().toString("yyyyMMdd") #end_time = self.dateEdit2.date().toString("yyyyMMdd")print("SELECT goods_code,goods_name,goods_unit,goods_type,in_time,in_count,note FROM erp.in_store where in_time between '"+ strat_time + "' and '"+end_time+"'")if kindname=="所有":result = datapg.query("SELECT goods_code,goods_name,goods_unit,goods_type,in_time,in_count,note FROM erp.in_store where in_time between '"+ strat_time + "' and '"+end_time+"'")else:# 查詢所選酒的入庫信息result = datapg.query("SELECT goods_code,goods_name,goods_unit,goods_type,in_time,in_count,note FROM erp.in_store where goods_name=%s ",kindname)row = len(result) # 取得記錄個數,用于設置表格的行數self.tbResult.setRowCount(row) # 設置表格行數self.tbResult.setColumnCount(7) # 設置表格列數# 設置表格的標題名稱self.tbResult.setHorizontalHeaderLabels(['酒品編號', '酒名稱', '酒規格', '酒類型', '入庫時間', '入庫數量','摘要'])for i in range(row): # 遍歷行for j in range(self.tbResult.columnCount()): # 遍歷列data = QTableWidgetItem(str(result[i][j])) # 轉換后可插入表格self.tbResult.setItem(i, j, data) # 設置每個單元格的數據8.數據庫連接(這里是用pg數據庫)
import psycopg2def open():db = psycopg2.connect(database="postgres", user="postgres", password="postgres", host="127.0.0.1", port="5432")return dbdef exec(sql):db=open() # 連接數據庫cursor = db.cursor() # 使用cursor()方法獲取操作游標try:cursor.execute(sql) # 執行增刪改的SQL語句db.commit() # 提交數據return 1 # 執行成功except:db.rollback() # 發生錯誤時回滾return 0 # 執行失敗finally:cursor.close() # 關閉游標db.close() # 關閉數據庫連接# 帶參數的精確查詢 def query(sql,*keys):db=open() # 連接數據庫cursor = db.cursor() # 使用cursor()方法獲取操作游標cursor.execute(sql,keys) # 執行查詢SQL語句result = cursor.fetchall() # 記錄查詢結果cursor.close() # 關閉游標db.close() # 關閉數據庫連接return result # 返回查詢結果# 不帶參數的模糊查詢 def query2(sql):db=open() # 連接數據庫cursor = db.cursor() # 使用cursor()方法獲取操作游標cursor.execute(sql) # 執行查詢SQL語句result = cursor.fetchall() # 記錄查詢結果cursor.close() # 關閉游標db.close() # 關閉數據庫連接return result # 返回查詢結果9.導出exc
def exportToExcel(self):wb = openpyxl.Workbook()columnHeaders = []# create column header listfor j in range(self.tbResult.columnCount()):columnHeaders.append(self.tbResult.horizontalHeaderItem(j).text())df = pd.DataFrame(columns=columnHeaders)print(df)# create dataframe object recordsetfor row in range(self.tbResult.rowCount()):for col in range(self.tbResult.columnCount()):df.at[row, columnHeaders[col]] = self.tbResult.item(row, col).text()df.to_excel(r'D:\deneme.xlsx', index=False)三.效果圖
總結
以上是生活随笔為你收集整理的使用 PyQT5 来做一个简易版库存管理系统(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装Centos7操作系统教程
- 下一篇: 超市管理系统