使用 PyQT5 来做一个简易版库存管理系统(二)
生活随笔
收集整理的這篇文章主要介紹了
使用 PyQT5 来做一个简易版库存管理系统(二)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
上一篇介紹了總體要做的功能,在這一篇中,我將先做出入庫查詢、庫存查詢的功能
一、界面規(guī)劃
窗體上邊結(jié)構(gòu)為索引條件,包含日期條件(開始日期至結(jié)束日期)、酒類型(下拉框)等等
窗體中部為查詢數(shù)據(jù)庫中獲取數(shù)據(jù)展示,此處控件選擇用?QTableWidget ,最后追加個(gè)導(dǎo)出excle的功能
二、正文
1.建窗體、設(shè)置窗體大小
class Ui_MainWindow1(QMainWindow):# 構(gòu)造方法def __init__(self):super(Ui_MainWindow1, self).__init__()self.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint) # 只顯示最小化和關(guān)閉按鈕self.setupUi(self) # 初始化窗體設(shè)置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.添加查詢、退出按鈕,按鈕點(diǎn)擊事件
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) # 綁定查詢按鈕的單擊信號(hào)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) # 使表格顏色交錯(cuò)顯示self.tbResult.verticalHeader().setVisible(False) # 隱藏垂直標(biāo)題6.定義方法獲取下拉框控件內(nèi)容(查詢酒類商品字典表獲取)
def bindCbox(self):self.cboxKinds.addItem("所有") # 設(shè)置臺(tái)賬類別的默認(rèn)首選項(xiàng)result = datapg.query("select goods_name from erp.goods") # 從臺(tái)賬類別中查詢數(shù)據(jù)for i in result: # 遍歷查詢結(jié)果self.cboxKinds.addItem(i[0]) # 在下拉列表中顯示臺(tái)賬類別7.查詢按鈕方法(查詢?nèi)霂靻斡涗洷慝@取數(shù)據(jù))
def query(self):self.tbResult.setRowCount(0) # 清空表格中的所有行# stuname=self.editName.text() #kindname=self.cboxKinds.currentText() # 記錄選擇的臺(tái)賬類別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) # 取得記錄個(gè)數(shù),用于設(shè)置表格的行數(shù)self.tbResult.setRowCount(row) # 設(shè)置表格行數(shù)self.tbResult.setColumnCount(7) # 設(shè)置表格列數(shù)# 設(shè)置表格的標(biāo)題名稱self.tbResult.setHorizontalHeaderLabels(['酒品編號(hào)', '酒名稱', '酒規(guī)格', '酒類型', '入庫時(shí)間', '入庫數(shù)量','摘要'])for i in range(row): # 遍歷行for j in range(self.tbResult.columnCount()): # 遍歷列data = QTableWidgetItem(str(result[i][j])) # 轉(zhuǎn)換后可插入表格self.tbResult.setItem(i, j, data) # 設(shè)置每個(gè)單元格的數(shù)據(jù)8.數(shù)據(jù)庫連接(這里是用pg數(shù)據(jù)庫)
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() # 連接數(shù)據(jù)庫cursor = db.cursor() # 使用cursor()方法獲取操作游標(biāo)try:cursor.execute(sql) # 執(zhí)行增刪改的SQL語句db.commit() # 提交數(shù)據(jù)return 1 # 執(zhí)行成功except:db.rollback() # 發(fā)生錯(cuò)誤時(shí)回滾return 0 # 執(zhí)行失敗finally:cursor.close() # 關(guān)閉游標(biāo)db.close() # 關(guān)閉數(shù)據(jù)庫連接# 帶參數(shù)的精確查詢 def query(sql,*keys):db=open() # 連接數(shù)據(jù)庫cursor = db.cursor() # 使用cursor()方法獲取操作游標(biāo)cursor.execute(sql,keys) # 執(zhí)行查詢SQL語句result = cursor.fetchall() # 記錄查詢結(jié)果cursor.close() # 關(guān)閉游標(biāo)db.close() # 關(guān)閉數(shù)據(jù)庫連接return result # 返回查詢結(jié)果# 不帶參數(shù)的模糊查詢 def query2(sql):db=open() # 連接數(shù)據(jù)庫cursor = db.cursor() # 使用cursor()方法獲取操作游標(biāo)cursor.execute(sql) # 執(zhí)行查詢SQL語句result = cursor.fetchall() # 記錄查詢結(jié)果cursor.close() # 關(guān)閉游標(biāo)db.close() # 關(guān)閉數(shù)據(jù)庫連接return result # 返回查詢結(jié)果9.導(dǎo)出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)三.效果圖
總結(jié)
以上是生活随笔為你收集整理的使用 PyQT5 来做一个简易版库存管理系统(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装Centos7操作系统教程
- 下一篇: 超市管理系统