python實現(xiàn)簡易自習室座位預(yù)約系統(tǒng)
剛學習python不久,如有問題希望能得到指正
0 效果
座位選擇框
1 關(guān)于所需庫
Python 環(huán)境中需要安裝下列 python 包:
- PySide2
- datetime
- json
- argparse
2 關(guān)于座位選擇框
選擇框內(nèi)桌子數(shù)量,大小,樣式以及每個椅子位置都是可變的,例如我們可以將桌子顏色和是否圓角改變:
這主要依靠seatInf.json內(nèi)的信息,展示如下:
{ "tableNum": 6, "tablePos": [ [0.02,0.15], [0.35,0.15], [0.68,0.15], [0.02,0.65], [0.35,0.65], [0.68,0.65] ], "tableSize": [ [0.25,0.2], [0.25,0.2], [0.25,0.2], [0.25,0.2], [0.25,0.2], [0.25,0.2] ], "tableType": [ 0,1,2,0,0,0 ], "tableSS": [ "QLabel{background: rgb(245,245,245);color:rgb(92,92,92);border-radius:50px;border: 3px solid rgb(142,142,142)}", "QLabel{background: rgb(245,245,245);color:rgb(92,92,92);border: 3px solid rgb(142,142,142)}", "QLabel{background: rgb(221,217,195);color:rgb(92,92,92);border: 3px solid rgb(142,142,142)}" ], "tableId": [ "A","B","C","D","E","F" ], "chairNum": [ 6,6,6,6,6,6 ], "chairPos": [ [ [0.04,-0.08], [0.105,-0.08], [0.17,-0.08], [0.04,0.21], [0.105,0.21], [0.17,0.21] ], [ [0.04,-0.08], [0.105,-0.08], [0.17,-0.08], [0.04,0.21], [0.105,0.21], [0.17,0.21] ],[ [0.04,-0.08], [0.105,-0.08], [0.17,-0.08], [0.04,0.21], [0.105,0.21], [0.17,0.21] ],[ [0.04,-0.08], [0.105,-0.08], [0.17,-0.08], [0.04,0.21], [0.105,0.21], [0.17,0.21] ],[ [0.04,-0.08], [0.105,-0.08], [0.17,-0.08], [0.04,0.21], [0.105,0.21], [0.17,0.21] ],[ [0.04,-0.08], [0.105,-0.08], [0.17,-0.08], [0.04,0.21], [0.105,0.21], [0.17,0.21] ] ], "chairSize": [ 0.032,0.07 ], "chairSS_W": "background: rgb(242,242,242);border-radius:15px;border: 3px solid rgb(74,69,42)", "chairSS_K": "background: rgb(64,64,64);border-radius:15px;border: 3px solid rgb(74,69,42)", "chairSS_R": "background: rgb(149,55,43);border-radius:15px;border: 3px solid rgb(74,69,42)", "mapSize": [ 2,2 ] }
3 關(guān)于申請表和座位被占情況
由于只是為了模擬過程,現(xiàn)申請表以及座位被占情況分別存儲在orderList.json和occupied.json中:
3.1 orderList.json:
"[[\"A1\", \"A2\", \"A3\", \"A4\", \"A5\", \"A6\", \"B1\", \"B2\", \"B3\", \"B4\", \"B5\", \"B6\", \"C1\", \"C2\", \"C3\", \"C4\", \"C5\", \"C6\", \"D1\", \"D2\", \"D3\", \"D4\", \"D5\", \"D6\", \"E1\", \"E2\", \"E3\", \"E4\", \"E5\", \"E6\", \"F1\", \"F2\", \"F3\", \"F4\", \"F5\", \"F6\"], [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"1816000XXXX\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"], [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"temp\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"]]"
3.2 occupied.json:
"{\"A1\": false, \"A2\": false, \"A3\": false, \"A4\": false, \"A5\": false, \"A6\": false, \"B1\": false, \"B2\": false, \"B3\": false, \"B4\": false, \"B5\": false, \"B6\": false, \"C1\": false, \"C2\": false, \"C3\": false, \"C4\": true, \"C5\": false, \"C6\": false, \"D1\": false, \"D2\": false, \"D3\": false, \"D4\": false, \"D5\": false, \"D6\": false, \"E1\": false, \"E2\": false, \"E3\": false, \"E4\": false, \"E5\": false, \"E6\": false, \"F1\": false, \"F2\": false, \"F3\": false, \"F4\": false, \"F5\": false, \"F6\": false}"
4 關(guān)于命令行參數(shù)
我們使用命令行代碼模擬刷卡過程,同時我們也設(shè)置了預(yù)約和申請暫離的命令行代碼:
4.1 slotCard_in
Python slotCard_in.py -i="XXXXXXXXXXX" Python slotCard_in.py --student-id="XXXXXXXXXXX"
4.2 slotCard_out
Python slotCard_out.py -i="XXXXXXXXXXX" Python slotCard_out.py --student-id="XXXXXXXXXXX"
4.3 cmd_order
''' TEST CODE: -------------------------------- see Map: Python cmd_order.py -------------------------------- order seat: Python cmd_order.py -i="XXXXXXXXXXX" -n="xxx" -s="A1" -h --help show the help message and exit -i --student-id student id -n --student-name student name -s --seatPos seat id '''
4.4 cmd_leave
''' TEST CODE: ---------------------------------------------- leave for temp Python cmd_leave.py -i="XXXXXXXXXXX" -t="temp" ---------------------------------------------- leave Python cmd_leave.py -i="XXXXXXXXXXX" -t="free" [or] Python cmd_leave.py -i="XXXXXXXXXXX" -h --help show the help message and exit -i --student-id student id -t --leave-type temp/free '''
5 關(guān)于命令行輸出
5.1 cmd_order 預(yù)約
> Python cmd_order.py [seat]============================ 可預(yù)約座位: ▇ A2 A3 A4 A5 A6 B1 B2 B3 B4 B5 B6 C1 C2 C3 C4 C5 C6 D1 D2 D3 D4 D5 D6 E1 E2 E3 E4 E5 E6 F1 F2 F3 F4 F5 F6 > Python cmd_order.py -i="18160000000" -n="xxx" -s="A1" [book error]======================== 座位已被占,請選擇其他位置申請 > Python cmd_order.py -i="18160000000" -n="xxx" -s="A100" [book error]======================== 座位編號格式不正確 > Python cmd_order.py -i="18160000000" -n="xxx" -s="A2" [book]=========================================== 2021-05-31 18:04:35 姓名:xxx 學號:18160000000 座次:A2 預(yù)約成功! ------------------------------------------------- 注意事項: 1、預(yù)約成功后請在30分鐘內(nèi)到達,否則預(yù)約信息將失效。 2、進入自習室前請刷校園卡核驗信息。 3、如要暫離請cmd運行如下代碼: Python cmd_leave.py -i='XXXXXXXXXXX' -t='temp' 4、離開、取消預(yù)約請cmd運行如下代碼: Python cmd_leave.py -i='XXXXXXXXXXX' -t='free' > Python cmd_order.py -i="18160000000" -n="xxx" -s="A3" [book error]======================== 請勿重復(fù)預(yù)約
5.2 slotCard_in 刷卡進入
> Python slotCard_in.py -i="1816000XXXX" [in error]========================== 非本校校園卡或已超時 > Python slotCard_in.py -i="18160000000" [in]================================ 預(yù)約時間:2021-05-31 18:04:35 校園卡號:18160000000 座次:A2
5.3 cmd_leave 申請離開或暫離
> Python cmd_leave.py -i="1816000XXXX" -t="temp" [out error]========================= 可能輸入了錯誤的校園卡號 > Python cmd_leave.py -i="18160000000" -t="temp" [out]=============================== 已進行暫離申請 > Python cmd_leave.py -i="18160000000" -t="free" [out]=============================== 已釋放位置
5.4 slotCard_out 刷卡離開或暫離
> Python slotCard_out.py -i="18160000000" [out]=============================== 暫離時間:2021-05-31 18:23:09 校園卡號:18160000000 座次:A1 > Python slotCard_out.py -i="1816000XXXX" [out error]========================= 請更換卡片再次嘗試
6 關(guān)于界面代碼
6.1 orderSystem.py
from PySide2.QtWidgets import QApplication, QWidget,QScrollArea from PySide2.QtWidgets import QLabel,QPushButton,QLineEdit from PySide2.QtGui import QIcon,QFont from PySide2.QtCore import Qt import sys sys.path.append("...") import json import datetime from orderDataDisplay import orderDisplay from InfOperate import occupySeat,order,timeoutDetection,alreadyOreder class Window_main(QWidget): def __init__(self,Width=700,Height=840): super().__init__() self.setWindowTitle("book seat online") timeoutDetection() self.Width=Width self.Height=Height self.selectedId="" self.selectedBtn=[] self.icoPath="./gallery/icon.ico" # 字體標簽 title_qf=QFont() title_qf.setPointSize(11) title_qf.setBold(True) title_qf.setFamily("Cambria") main_qf=QFont() main_qf.setPointSize(27) main_qf.setBold(True) main_qf.setFamily("Cambria") Inf_qf=QFont() Inf_qf.setPointSize(10) Inf_qf.setBold(True) Inf_qf.setFamily("Cambria") table_qf=QFont() table_qf.setPointSize(16) table_qf.setBold(True) table_qf.setFamily("Cambria") # --- self.QF_part_title=title_qf # 框標題字體標簽 self.QF_main_title=main_qf # 主標題字體標簽 self.QF_state_explain=Inf_qf # 狀態(tài)標簽解釋文本字體標簽 self.QF_Inf_title=title_qf # 信息標題字體標簽 self.QF_Inf_text=Inf_qf # 信息文本字體標簽 self.QF_table_name=table_qf # 桌子編號信息標簽 # 樣式表 self.SS_part_frame="QLabel{background: rgb(245,245,245);color:rgb(92,92,92);border-radius:8px;border: 2.5px solid rgb(122,122,122)}" self.SS_part_title="QLabel{background: rgb(245,245,245);color:rgb(92,92,92)}" self.SS_main_title="QLabel{background: rgb(245,245,245);color:rgb(92,92,92);border-radius:50px;border: 3px solid rgb(142,142,142)}" self.SS_state_frame="QLabel{background: rgb(245,245,245);border-radius:5px;border: 3px solid rgb(172,172,172)}" self.SS_W="QLabel{background: rgb(242,242,242);border-radius:9px;border: 3px solid rgb(74,69,42)}" self.SS_K="QLabel{background: rgb(64,64,64);border-radius:9px;border: 3px solid rgb(74,69,42)}" self.SS_R="QLabel{background: rgb(149,55,43);border-radius:9px;border: 3px solid rgb(74,69,42)}" self.SS_state_explain="QLabel{background: rgb(214,219,233);color:rgb(92,92,92)}" self.SS_Inf_title="QLabel{background: rgb(230,230,230);color:rgb(82,82,82);border-radius:8px}" self.SS_text_Line="QLineEdit{border-radius:3px;background: rgb(205,205,205);color:rgb(82,82,82)}" self.SS_book_btn="color:rgb(255,255,255);background: rgb(79,148,204)" # path=sys.argv[0] # path=path[0:path.rfind("/")] f=open("./config/seatInf.json","r") seatInf=json.load(f) f=open("./config/occupied.json","r") seatOccupied=json.load(f) self.seatInf=seatInf self.seatOccupied=json.loads(seatOccupied) self.setSize() self.setIcon() self.partition() self.setStateExp() self.setInfBox() self.setMap() self.setBookBtn() # ================================================================================================ # 回調(diào)函數(shù)部分: def selectedPos(self):# 座位選擇回調(diào) btn=self.sender() tempSelectedId=btn.property("chairId") if not self.seatOccupied[tempSelectedId]: if len(self.selectedId)==0: self.selectedId=tempSelectedId self.selectedBtn=btn btn.setStyleSheet(self.seatInf["chairSS_R"]) self.selectedBox.setText(" 當前選擇: "+tempSelectedId) else: self.selectedBtn.setStyleSheet(self.seatInf["chairSS_W"]) self.selectedBtn=btn btn.setStyleSheet(self.seatInf["chairSS_R"]) self.selectedId=tempSelectedId self.selectedBox.setText(" 當前選擇: "+tempSelectedId) def bookSeat(self): if not len(self.selectedId)==0: if alreadyOreder(self.InfBox_Id.text()): print("================================") print("請勿重復(fù)預(yù)約") print(" ") else: nowDate=datetime.datetime.now() nowDateStr=nowDate.strftime('%Y-%m-%d %H:%M:%S') print("================================") print(nowDateStr) print("姓名:"+self.InfBox_Name.text()) print("學號:"+self.InfBox_Id.text()) print("座次:"+self.selectedId) print(" ") # myapp.exit() # app = QApplication.instance() # if app is None: # app = QApplication(sys.argv) self.window_disp= orderDisplay(self.InfBox_Name.text(), self.InfBox_Id.text(), nowDateStr, self.selectedId,700,840) self.window_disp.show() self.close() occupySeat(self.selectedId) order(self.InfBox_Id.text(),nowDateStr,self.selectedId) # ================================================================================================ # 框架構(gòu)造函數(shù)部分: def setSize(self):# 調(diào)整框架大小 self.setGeometry(80,80,self.Width,self.Height) self.setMaximumSize(self.Width,self.Height) self.setMinimumSize(self.Width,self.Height) def setIcon(self):# 設(shè)置圖標 appIcon=QIcon(self.icoPath) self.setWindowIcon(appIcon) def setStateExp(self):# 繪制狀態(tài)解釋框 Width=self.Width Height=self.Height self.part0=QLabel(self) self.part0.setGeometry(0.66*Width,0.045*Height, 0.28*Width,0.14*Height) self.part0.setStyleSheet(self.SS_state_frame) # ---Color Bar-------------------------------------------------------------------- self.CB1=QLabel(self) self.CB1.setGeometry(0.68*Width,0.06*Height,0.05*Width,0.03*Height) self.CB1.setStyleSheet(self.SS_W) self.CB2=QLabel(self) self.CB2.setGeometry(0.68*Width,(0.06+0.04)*Height,0.05*Width,0.03*Height) self.CB2.setStyleSheet(self.SS_K) self.CB3=QLabel(self) self.CB3.setGeometry(0.68*Width,(0.06+0.08)*Height,0.05*Width,0.03*Height) self.CB3.setStyleSheet(self.SS_R) # ---Color Bar 解釋文本------------------------------------------------------------- self.plaintext1=QLabel(self) self.plaintext1.setGeometry(0.76*Width,(0.059)*Height,0.15*Width,0.032*Height) self.plaintext1.setStyleSheet(self.SS_state_explain) self.plaintext1.setText(" 可選擇") self.plaintext1.setFont(self.QF_state_explain) self.plaintext2=QLabel(self) self.plaintext2.setGeometry(0.76*Width,(0.059+0.04)*Height,0.15*Width,0.032*Height) self.plaintext2.setStyleSheet(self.SS_state_explain) self.plaintext2.setText(" 已被選") self.plaintext2.setFont(self.QF_state_explain) self.plaintext3=QLabel(self) self.plaintext3.setGeometry(0.76*Width,(0.059+0.08)*Height,0.15*Width,0.032*Height) self.plaintext3.setStyleSheet(self.SS_state_explain) self.plaintext3.setText(" 當前選擇") self.plaintext3.setFont(self.QF_state_explain) def setInfBox(self): Width=self.Width Height=self.Height # ---信息標題------------------------------------------ self.InfTitle_Name=QLabel(self) self.InfTitle_Name.setGeometry(0.09*Width,0.28*Height, 0.16*Width,0.05*Height) self.InfTitle_Name.setStyleSheet(self.SS_Inf_title) self.InfTitle_Name.setText(" 姓名:") self.InfTitle_Name.setFont(self.QF_Inf_title) # --- self.InfTitle_Id=QLabel(self) self.InfTitle_Id.setGeometry(0.09*Width,0.36*Height, 0.16*Width,0.05*Height) self.InfTitle_Id.setStyleSheet(self.SS_Inf_title) self.InfTitle_Id.setText(" 學號:") self.InfTitle_Id.setFont(self.QF_Inf_title) # ---信息文本框------------------------------------------ self.InfBox_Name=QLineEdit(self) self.InfBox_Name.setText("示例:李華") self.InfBox_Name.move(0.3*Width,0.281*Height) self.InfBox_Name.resize(0.6*Width,0.048*Height) self.InfBox_Name.setFont(self.QF_Inf_text) self.InfBox_Name.setStyleSheet(self.SS_text_Line) #self.InfBox_Name.textChanged.connect(self.colorCheckFunc) self.InfBox_Id=QLineEdit(self) self.InfBox_Id.setText("示例:XXXXXXXXXXX") self.InfBox_Id.move(0.3*Width,0.361*Height) self.InfBox_Id.resize(0.6*Width,0.048*Height) self.InfBox_Id.setFont(self.QF_Inf_text) self.InfBox_Id.setStyleSheet(self.SS_text_Line) #self.InfBox_ID.textChanged.connect(self.colorCheckFunc) def partition(self):# 繪制框線分布 Width=self.Width Height=self.Height # ---標題框--------------------------------------------------- self.part0=QLabel(self) self.part0.setGeometry(0.05*Width,0.045*Height, 0.52*Width,0.14*Height) self.part0.setStyleSheet(self.SS_main_title) self.part0.setAlignment(Qt.AlignCenter) self.part0.setText(" 自習室預(yù)約") self.part0.setFont(self.QF_main_title) # self.part0title=QLabel(self) # self.part0title.setGeometry(0.098*Width,0.06*Height, # 0.43*Width,0.11*Height) # self.part0title.setStyleSheet(self.SS_part_title) # self.part0title.setText(" 自習室預(yù)約") # self.part0title.setFont(self.QF_main_title) # ---信息填寫框----------------------------------------------- self.part1=QLabel(self) self.part1.setGeometry(0.04*Width,0.23*Height, 0.92*Width,0.24*Height) self.part1.setStyleSheet(self.SS_part_frame) self.part1title=QLabel(self) self.part1title.setGeometry(0.08*Width,0.21*Height, 0.15*Width,0.04*Height) self.part1title.setStyleSheet(self.SS_part_title) self.part1title.setText(" 信息填寫") self.part1title.setFont(self.QF_part_title) # ---座位選擇框------------------------------------------------ self.part2=QLabel(self) self.part2.setGeometry(0.04*Width,0.53*Height, 0.92*Width,0.355*Height) self.part2.setStyleSheet(self.SS_part_frame) self.part1title=QLabel(self) self.part1title.setGeometry(0.08*Width,0.51*Height, 0.15*Width,0.04*Height) self.part1title.setStyleSheet(self.SS_part_title) self.part1title.setText(" 座位選擇") self.part1title.setFont(self.QF_part_title) # ================================================================================================ # 可滑動區(qū)域部分: def setMap(self): Width=self.Width Height=self.Height self.map=QScrollArea(self) self.map.setGeometry(0.05*Width,0.545*Height, 0.9*Width,0.325*Height) self.drawMap() self.map.setWidget(self.mapContent) def drawMap(self):# 繪制座位地圖 self.mapContent=QWidget(self) boxWidth=0.9*self.Width boxHeight=0.325*self.Height seatInf=self.seatInf seatOccupied=self.seatOccupied mapWidth=boxWidth*seatInf["mapSize"][0] mapHeight=boxHeight*seatInf["mapSize"][1] tableSize=seatInf["tableSize"] tablePos=seatInf["tablePos"] chairSize=seatInf["chairSize"] chairPos=seatInf["chairPos"] self.mapContent.setGeometry(0,0,mapWidth,mapHeight) self.mapContent.setMaximumSize(mapWidth,mapHeight) self.mapContent.setMinimumSize(mapWidth,mapHeight) for i in range(0,seatInf["tableNum"]): table=QLabel(self.mapContent) table.setGeometry(tablePos[i][0]*mapWidth,tablePos[i][1]*mapHeight, tableSize[i][0]*mapWidth,tableSize[i][1]*mapHeight) table.setText(seatInf["tableId"][i]) table.setFont(self.QF_table_name) table.setAlignment(Qt.AlignCenter) table.setStyleSheet(seatInf["tableSS"][seatInf["tableType"][i]]) for j in range(0,seatInf["chairNum"][i]): chairBnt=QPushButton(self.mapContent) chairBnt.setGeometry((tablePos[i][0]+chairPos[i][j][0])*mapWidth, (tablePos[i][1]+chairPos[i][j][1])*mapHeight, chairSize[0]*mapWidth, chairSize[1]*mapHeight) chairId=seatInf["tableId"][i]+str(j+1) if seatOccupied[chairId]: chairBnt.setStyleSheet(seatInf["chairSS_K"]) else: chairBnt.setStyleSheet(seatInf["chairSS_W"]) chairBnt.setProperty("chairId",chairId) chairBnt.clicked.connect(self.selectedPos) def setBookBtn(self): Width=self.Width Height=self.Height self.selectedBox=QLabel(self) self.selectedBox.setGeometry(0.54*Width,(0.92)*Height,0.22*Width,0.05*Height) self.selectedBox.setStyleSheet(self.SS_state_explain) self.selectedBox.setText(" 當前選擇:") self.selectedBox.setFont(self.QF_Inf_title) self.bookBtn=QPushButton(self) self.bookBtn.setGeometry(0.79*Width,(0.92)*Height,0.16*Width,0.05*Height) self.bookBtn.setStyleSheet(self.SS_book_btn) self.bookBtn.setText("預(yù)約") self.bookBtn.setFont(self.QF_Inf_title) self.bookBtn.clicked.connect(self.bookSeat) # =========================================================================================== # 函數(shù)調(diào)用: myapp = QApplication(sys.argv) window_main = Window_main(700,840) window_main.show() sys.exit(myapp.exec_())
6.2 orderDataDisplay.py
from PySide2.QtWidgets import QApplication, QWidget from PySide2.QtWidgets import QLabel,QPushButton from PySide2.QtGui import QIcon,QFont,QPixmap from PySide2.QtCore import Qt import sys sys.path.append("...") import datetime from InfOperate import freeSeat,setString class Window_disp(QWidget): def __init__(self,studentName,studentId,bookTime,seatId,Width=700,Height=840): super().__init__() self.setWindowTitle("order successfully") self.studentName=studentName self.studentId=studentId self.bookTime=bookTime self.seatId=seatId self.Width=Width self.Height=Height # path=sys.argv[0] # path=path[0:path.rfind("/")] self.orderSuccTitlePath="./gallery/order_succ_title.png" self.icoPath="./gallery/icon.ico" # 字體標簽 title_qf=QFont() title_qf.setPointSize(11) title_qf.setBold(True) title_qf.setFamily("Cambria") Inf_qf=QFont() Inf_qf.setPointSize(10) Inf_qf.setBold(True) Inf_qf.setFamily("Cambria") matters_qf=QFont() matters_qf.setPointSize(10.5) matters_qf.setBold(True) matters_qf.setFamily("Cambria") # --- self.QF_part_title=title_qf # 框標題字體標簽 self.QF_Inf_title=title_qf # 信息標題字體標簽 self.QF_Inf_text=Inf_qf # 信息文本字體標簽 self.QF_matters=matters_qf # 注意事項字體標簽 # 樣式表 self.SS_part_frame="QLabel{background: rgb(245,245,245);color:rgb(92,92,92);border-radius:8px;border: 2.5px solid rgb(122,122,122)}" self.SS_part_title="QLabel{background: rgb(245,245,245);color:rgb(92,92,92)}" self.SS_Inf_title="QLabel{background: rgb(230,230,230);color:rgb(82,82,82);border-radius:8px}" self.SS_text_Line="QLabel{border-radius:3px;background: rgb(205,205,205);color:rgb(82,82,82)}" self.SS_book_btn="color:rgb(255,255,255);background: rgb(79,148,204)" self.setSize() self.setIcon() self.setTitle() self.partition() self.InfDisplay() self.mattersDisplay() self.setBtn() # ================================================================================================ # 回調(diào)函數(shù)部分: def tempLeave(self): if self.tleaveBtn.text()=="暫離": setString(self.seatId,"temp") nowDate=datetime.datetime.now() nowDateStr=nowDate.strftime('%Y-%m-%d %H:%M:%S') self.InfBox_Time.setText(nowDateStr) self.tleaveBtn.setText("暫離中") def leave(self): freeSeat(self.seatId) self.close() # ================================================================================================ # 框架構(gòu)造函數(shù)部分: def setSize(self):# 調(diào)整框架大小 self.setGeometry(80,80,self.Width,self.Height) self.setMaximumSize(self.Width,self.Height) self.setMinimumSize(self.Width,self.Height) def setIcon(self):# 設(shè)置圖標 appIcon=QIcon(self.icoPath) self.setWindowIcon(appIcon) def setTitle(self): Width=self.Width Height=self.Height self.Imgbox=QLabel(self) self.Imgbox.setGeometry(0.24*Width,0.02*Height, 0.52*Width,0.18*Height) self.Imgpic=QPixmap(self.orderSuccTitlePath) self.Imgpic=self.Imgpic.scaled(0.52*Width,0.18*Height) self.Imgbox.setPixmap(self.Imgpic) def partition(self):# 繪制框線分布 Width=self.Width Height=self.Height # ---信息展示框----------------------------------------------- self.part1=QLabel(self) self.part1.setGeometry(0.04*Width,0.23*Height, 0.92*Width,0.40*Height) self.part1.setStyleSheet(self.SS_part_frame) self.part1title=QLabel(self) self.part1title.setGeometry(0.08*Width,0.21*Height, 0.15*Width,0.04*Height) self.part1title.setStyleSheet(self.SS_part_title) self.part1title.setText(" 個人信息 ") self.part1title.setFont(self.QF_part_title) # ---注意事項框----------------------------------------------- self.part2=QLabel(self) self.part2.setGeometry(0.04*Width,0.67*Height, 0.92*Width,0.22*Height) self.part2.setStyleSheet(self.SS_part_frame) self.part2title=QLabel(self) self.part2title.setGeometry(0.08*Width,0.65*Height, 0.15*Width,0.04*Height) self.part2title.setStyleSheet(self.SS_part_title) self.part2title.setText(" 注意事項") self.part2title.setFont(self.QF_part_title) def InfDisplay(self): Width=self.Width Height=self.Height # ---信息標題------------------------------------------ self.InfTitle_Name=QLabel(self) self.InfTitle_Name.setGeometry(0.09*Width,0.28*Height, 0.16*Width,0.05*Height) self.InfTitle_Name.setStyleSheet(self.SS_Inf_title) self.InfTitle_Name.setText(" 姓名:") self.InfTitle_Name.setFont(self.QF_Inf_title) # --- self.InfTitle_Id=QLabel(self) self.InfTitle_Id.setGeometry(0.09*Width,0.36*Height, 0.16*Width,0.05*Height) self.InfTitle_Id.setStyleSheet(self.SS_Inf_title) self.InfTitle_Id.setText(" 學號:") self.InfTitle_Id.setFont(self.QF_Inf_title) # --- self.InfTitle_Time=QLabel(self) self.InfTitle_Time.setGeometry(0.09*Width,0.44*Height, 0.16*Width,0.05*Height) self.InfTitle_Time.setStyleSheet(self.SS_Inf_title) self.InfTitle_Time.setText(" 時間:") self.InfTitle_Time.setFont(self.QF_Inf_title) # --- self.InfTitle_Seat=QLabel(self) self.InfTitle_Seat.setGeometry(0.09*Width,0.52*Height, 0.16*Width,0.05*Height) self.InfTitle_Seat.setStyleSheet(self.SS_Inf_title) self.InfTitle_Seat.setText(" 座次:") self.InfTitle_Seat.setFont(self.QF_Inf_title) # ---信息文本框------------------------------------------ self.InfBox_Name=QLabel(self) self.InfBox_Name.setText(self.studentName) self.InfBox_Name.move(0.3*Width,0.281*Height) self.InfBox_Name.resize(0.6*Width,0.048*Height) self.InfBox_Name.setFont(self.QF_Inf_text) self.InfBox_Name.setStyleSheet(self.SS_text_Line) self.InfBox_Name.setAlignment(Qt.AlignCenter) # --- self.InfBox_Id=QLabel(self) self.InfBox_Id.setText(self.studentId) self.InfBox_Id.move(0.3*Width,0.361*Height) self.InfBox_Id.resize(0.6*Width,0.048*Height) self.InfBox_Id.setFont(self.QF_Inf_text) self.InfBox_Id.setStyleSheet(self.SS_text_Line) self.InfBox_Id.setAlignment(Qt.AlignCenter) # --- self.InfBox_Time=QLabel(self) self.InfBox_Time.setText(self.bookTime) self.InfBox_Time.move(0.3*Width,0.441*Height) self.InfBox_Time.resize(0.6*Width,0.048*Height) self.InfBox_Time.setFont(self.QF_Inf_text) self.InfBox_Time.setStyleSheet(self.SS_text_Line) self.InfBox_Time.setAlignment(Qt.AlignCenter) # --- self.InfBox_Seat=QLabel(self) self.InfBox_Seat.setText(self.seatId) self.InfBox_Seat.move(0.3*Width,0.521*Height) self.InfBox_Seat.resize(0.6*Width,0.048*Height) self.InfBox_Seat.setFont(self.QF_Inf_text) self.InfBox_Seat.setStyleSheet(self.SS_text_Line) self.InfBox_Seat.setAlignment(Qt.AlignCenter) def mattersDisplay(self): Width=self.Width Height=self.Height self.m1=QLabel(self) self.m1.setText("1、預(yù)約成功后請在30分鐘內(nèi)到達,否則預(yù)約信息將失效。") self.m1.setGeometry(0.06*Width,0.71*Height, 0.87*Width,0.03*Height) self.m1.setStyleSheet("QLabel{color:rgb(82,82,82)}") self.m1.setFont(self.QF_matters) self.m2=QLabel(self) self.m2.setText("2、進入自習室前請刷校園卡核驗信息。") self.m2.setGeometry(0.06*Width,0.75*Height, 0.87*Width,0.03*Height) self.m2.setStyleSheet("QLabel{color:rgb(82,82,82)}") self.m2.setFont(self.QF_matters) self.m3=QLabel(self) self.m3.setText("3、如要離開請點擊下方“暫離”按鈕,否則將釋放座位信息。") self.m3.setGeometry(0.06*Width,0.79*Height, 0.87*Width,0.03*Height) self.m3.setStyleSheet("QLabel{color:rgb(82,82,82)}") self.m3.setFont(self.QF_matters) self.m4=QLabel(self) self.m4.setText("4、離開、取消預(yù)約請點擊下方“離開\取消”按鈕。") self.m4.setGeometry(0.06*Width,0.83*Height, 0.87*Width,0.03*Height) self.m4.setStyleSheet("QLabel{color:rgb(82,82,82)}") self.m4.setFont(self.QF_matters) def setBtn(self): Width=self.Width Height=self.Height self.tleaveBtn=QPushButton(self) self.tleaveBtn.setGeometry(0.18*Width,(0.92)*Height,0.2*Width,0.05*Height) self.tleaveBtn.setStyleSheet(self.SS_book_btn) self.tleaveBtn.setText("暫離") self.tleaveBtn.setFont(self.QF_Inf_title) self.tleaveBtn.clicked.connect(self.tempLeave) Width=self.Width Height=self.Height self.leaveBtn=QPushButton(self) self.leaveBtn.setGeometry((1-0.2-0.18)*Width,(0.92)*Height,0.2*Width,0.05*Height) self.leaveBtn.setStyleSheet(self.SS_book_btn) self.leaveBtn.setText("離開\取消") self.leaveBtn.setFont(self.QF_Inf_title) self.leaveBtn.clicked.connect(self.leave) # =========================================================================================== # 函數(shù)調(diào)用: # myapp = QApplication(sys.argv) # window_disp = Window_disp("李華","1816000XXXX","2021-05-30 17:04:24","A1",700,840) # window_disp.show() # myapp.exec_() def orderDisplay(studentName,studentId,bookTime,seatId,Width=700,Height=840): window_disp = Window_disp(studentName,studentId,bookTime,seatId,Width,Height) return window_disp
-1 后注
完整代碼、json文件、圖片素材、md文件下載鏈接如下,詳細描述請閱讀README.md文件:more-table_jb51.rar
到此這篇關(guān)于python實現(xiàn)簡易自習室座位預(yù)約系統(tǒng)的文章就介紹到這了,更多相關(guān)python自習室座位預(yù)約內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python select及selectors模塊概念用法詳解
這篇文章主要介紹了Python select及selectors模塊概念用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06python使用beautifulsoup4爬取酷狗音樂代碼實例
這篇文章主要介紹了python使用beautifulsoup4爬取酷狗音樂代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12python+tkinter實現(xiàn)學生管理系統(tǒng)
這篇文章主要為大家詳細介紹了python+tkinter實現(xiàn)學生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08Python 開發(fā)工具PyCharm安裝教程圖文詳解(新手必看)
PyCharm是一種Python IDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,比如調(diào)試、語法高亮、Project管理、代碼跳轉(zhuǎn)、智能提示、自動完成、單元測試、版本控制。今天通過本文給大家分享PyCharm安裝教程,一起看看吧2020-02-02Python使用pandas導(dǎo)入csv文件內(nèi)容的示例代碼
這篇文章主要介紹了Python使用pandas導(dǎo)入csv文件內(nèi)容,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12wtfPython—Python中一組有趣微妙的代碼【收藏】
Wtfpython講解了大量的Python編譯器的內(nèi)容。這篇文章主要介紹了wtfPython-Python中一些奇妙的代碼,感興趣的朋友跟隨腳本之家小編一起看看吧2018-08-08Python實現(xiàn)PyPDF2處理PDF文件的方法示例
這篇文章主要介紹了Python實現(xiàn)PyPDF2處理PDF文件的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09