目錄
- 0 效果
- 1 關于所需庫
- 2 關于座位選擇框
- 3 關于申請表和座位被占情況
- 3.1 orderList.json:
- 3.2 occupied.json:
- 4 關于命令行參數(shù)
- 4.1 slotCard_in
- 4.2 slotCard_out
- 4.3 cmd_order
- 4.4 cmd_leave
- 5 關于命令行輸出
- 5.1 cmd_order 預約
- 5.2 slotCard_in 刷卡進入
- 5.3 cmd_leave 申請離開或暫離
- 5.4 slotCard_out 刷卡離開或暫離
- 6 關于界面代碼
- 6.1 orderSystem.py
- 6.2 orderDataDisplay.py
- -1 后注
剛學習python不久,如有問題希望能得到指正
0 效果
座位選擇框
1 關于所需庫
Python 環(huán)境中需要安裝下列 python 包:
- PySide2
- datetime
- json
- argparse
2 關于座位選擇框
選擇框內(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 關于申請表和座位被占情況
由于只是為了模擬過程,現(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 關于命令行參數(shù)
我們使用命令行代碼模擬刷卡過程,同時我們也設置了預約和申請暫離的命令行代碼:
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 關于命令行輸出
5.1 cmd_order 預約
> Python cmd_order.py
[seat]============================
可預約座位:
▇ 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
預約成功!
-------------------------------------------------
注意事項:
1、預約成功后請在30分鐘內(nèi)到達,否則預約信息將失效。
2、進入自習室前請刷校園卡核驗信息。
3、如要暫離請cmd運行如下代碼:
Python cmd_leave.py -i='XXXXXXXXXXX' -t='temp'
4、離開、取消預約請cmd運行如下代碼:
Python cmd_leave.py -i='XXXXXXXXXXX' -t='free'
> Python cmd_order.py -i="18160000000" -n="xxx" -s="A3"
[book error]========================
請勿重復預約
5.2 slotCard_in 刷卡進入
> Python slotCard_in.py -i="1816000XXXX"
[in error]==========================
非本校校園卡或已超時
> Python slotCard_in.py -i="18160000000"
[in]================================
預約時間: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 關于界面代碼
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("請勿重復預約")
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)
# ================================================================================================
# 框架構造函數(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):# 設置圖標
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(" 自習室預約")
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(" 自習室預約")
# 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("預約")
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()
# ================================================================================================
# 框架構造函數(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):# 設置圖標
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、預約成功后請在30分鐘內(nèi)到達,否則預約信息將失效。")
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、離開、取消預約請點擊下方“離開\取消”按鈕。")
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
到此這篇關于python實現(xiàn)簡易自習室座位預約系統(tǒng)的文章就介紹到這了,更多相關python自習室座位預約內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python Requests模擬登錄實現(xiàn)圖書館座位自動預約