婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python實現簡易自習室座位預約系統

python實現簡易自習室座位預約系統

熱門標簽:如何地圖標注公司 企業彩鈴地圖標注 外賣地址有什么地圖標注 長春極信防封電銷卡批發 煙臺電話外呼營銷系統 銀川電話機器人電話 電銷機器人錄音要學習什么 上海正規的外呼系統最新報價 預覽式外呼系統

剛學習python不久,如有問題希望能得到指正

0 效果

座位選擇框


1 關于所需庫

Python 環境中需要安裝下列 python 包:

  • PySide2
  • datetime
  • json
  • argparse

2 關于座位選擇框

選擇框內桌子數量,大小,樣式以及每個椅子位置都是可變的,例如我們可以將桌子顏色和是否圓角改變:


這主要依靠seatInf.json內的信息,展示如下:

{
    "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 關于申請表和座位被占情況

由于只是為了模擬過程,現申請表以及座位被占情況分別存儲在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 關于命令行參數

我們使用命令行代碼模擬刷卡過程,同時我們也設置了預約和申請暫離的命令行代碼:

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分鐘內到達,否則預約信息將失效。
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        # 狀態標簽解釋文本字體標簽
        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()    
    # ================================================================================================
    # 回調函數部分:
    def selectedPos(self):# 座位選擇回調
        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)

            
            


    # ================================================================================================
    # 框架構造函數部分:
    def setSize(self):# 調整框架大小
        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):# 繪制狀態解釋框
        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)
        # ================================================================================================
        # 可滑動區域部分:
    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)
# ===========================================================================================
# 函數調用:
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()
    # ================================================================================================
    # 回調函數部分:
    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()



    # ================================================================================================
    # 框架構造函數部分:
    def setSize(self):# 調整框架大小
        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分鐘內到達,否則預約信息將失效。") 
        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)

# ===========================================================================================
# 函數調用:
# 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實現簡易自習室座位預約系統的文章就介紹到這了,更多相關python自習室座位預約內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python Requests模擬登錄實現圖書館座位自動預約

標簽:佳木斯 湖北 西寧 珠海 潮州 宜昌 上饒 盤錦

巨人網絡通訊聲明:本文標題《python實現簡易自習室座位預約系統》,本文關鍵詞  python,實現,簡易,自習室,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python實現簡易自習室座位預約系統》相關的同類信息!
  • 本頁收集關于python實現簡易自習室座位預約系統的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美大片免费久久精品三p| 中文字幕在线不卡一区| 欧美四级电影网| 欧美一区二区视频在线观看| 欧美电影在线免费观看| 欧美v亚洲v综合ⅴ国产v| 国产精品嫩草久久久久| 亚洲影视在线观看| 麻豆91在线播放免费| 国产乱码精品一区二区三| 91麻豆蜜桃一区二区三区| 91精品国产综合久久精品麻豆| 国产午夜亚洲精品不卡| 午夜久久久久久久久久一区二区| 九一九一国产精品| 欧美性xxxxxx少妇| 国产精品美女久久久久aⅴ国产馆| 午夜不卡在线视频| 国产精品久久综合| 日韩国产一区二| av色综合久久天堂av综合| 日韩你懂的在线观看| 麻豆久久一区二区| 国产精品69毛片高清亚洲| 欧美日韩黄视频| 91精品国产综合久久久久久久久久| 久久久久久99精品| 午夜欧美电影在线观看| 不卡的av电影| 精品国免费一区二区三区| 国产精品色在线| 国产麻豆一精品一av一免费| 欧美日韩精品综合在线| 亚洲欧美自拍偷拍| 蜜臀久久久99精品久久久久久| 国产精品丝袜黑色高跟| 免费成人美女在线观看.| 91丨九色丨尤物| 国产精品18久久久久| 在线不卡a资源高清| 亚洲欧美经典视频| 粉嫩aⅴ一区二区三区四区 | 日韩av一级电影| 欧美视频精品在线| 亚洲一区二区中文在线| 91在线码无精品| 中文字幕日本不卡| 国产99久久久精品| 中文字幕第一区第二区| 国产成人精品免费在线| www.亚洲色图.com| 久久久www成人免费无遮挡大片| 日韩在线卡一卡二| 欧美一级片免费看| 日本91福利区| 日韩免费观看2025年上映的电影| 亚洲国产成人av| 欧美午夜寂寞影院| 洋洋成人永久网站入口| 在线看日韩精品电影| 中文字幕制服丝袜成人av | 精品999久久久| 麻豆国产欧美一区二区三区| 91麻豆精品国产91久久久资源速度| 日韩高清一区在线| 日韩一区二区精品葵司在线| 精品一区二区三区香蕉蜜桃| 亚洲精品在线一区二区| 国产乱一区二区| 国产女主播视频一区二区| 成人一区在线看| 亚洲女厕所小便bbb| 99久久久久久99| 一区二区三区在线视频免费| 91极品视觉盛宴| 亚洲第一在线综合网站| 精品久久免费看| 粉嫩av一区二区三区粉嫩| 国产欧美一区视频| 97se亚洲国产综合自在线| 国产精品久久夜| 色综合久久久网| 亚洲成人手机在线| 欧美男男青年gay1069videost| 激情五月婷婷综合网| 久久久国产精品麻豆| 一本一本大道香蕉久在线精品 | 国产无遮挡一区二区三区毛片日本| 韩国成人精品a∨在线观看| 国产精品乱人伦| 欧美日韩精品一区二区天天拍小说| 美女www一区二区| 亚洲图片激情小说| 欧美高清视频一二三区| 精品少妇一区二区三区在线播放| 韩国欧美国产1区| 成人高清免费观看| 国产999精品久久久久久| 亚洲一区二区中文在线| 欧美精彩视频一区二区三区| 国产精品女主播av| 欧美影片第一页| 国产三级一区二区| 欧美性色综合网| 国产欧美日韩卡一| 欧美久久久久中文字幕| 国产亚洲精品免费| 欧美成人女星排行榜| 免费高清成人在线| 91免费视频观看| 欧美xxxxx牲另类人与| 欧美tickling挠脚心丨vk| 国产成人亚洲综合a∨婷婷| 一区二区三区欧美日韩| 亚洲欧美日韩人成在线播放| 日本大胆欧美人术艺术动态| 欧美亚洲一区三区| 蜜桃视频在线观看一区| 成人免费一区二区三区视频 | 久久精品视频免费观看| 日韩毛片精品高清免费| 美国毛片一区二区三区| 国产精品久久久久久久久免费丝袜| 欧美日韩国产系列| 日本福利一区二区| 极品少妇一区二区三区精品视频| 欧美一区二区在线播放| 91精品国产综合久久福利软件| 色婷婷av一区二区三区大白胸| 国产精品视频看| 欧美性色欧美a在线播放| 欧美激情一区在线观看| 日产国产欧美视频一区精品| 日本vs亚洲vs韩国一区三区| 国产精品一级在线| 性做久久久久久免费观看欧美| 国内精品免费**视频| 首页欧美精品中文字幕| 精品91自产拍在线观看一区| 亚洲国产日韩a在线播放 | 一本到高清视频免费精品| 久久五月婷婷丁香社区| 在线不卡免费欧美| 亚洲国产成人午夜在线一区| 国产欧美日韩在线| 色久优优欧美色久优优| 欧美在线影院一区二区| 欧美美女黄视频| 国产精品久久夜| 日本一区中文字幕| 国产成人在线观看免费网站| 99精品偷自拍| 欧美日韩成人在线| 99热精品国产| 成人动漫一区二区在线| 日日噜噜夜夜狠狠视频欧美人| 久久久国产一区二区三区四区小说| 色婷婷久久综合| 东方欧美亚洲色图在线| 蜜臀av一区二区在线免费观看| 亚洲午夜精品网| 日韩精品午夜视频| 亚洲一区在线观看免费| 中文字幕 久热精品 视频在线 | 99视频精品全部免费在线| 黄色资源网久久资源365| 国产一区二区三区久久久| 久草这里只有精品视频| 日韩在线观看一区二区| 激情综合色丁香一区二区| 久久不见久久见免费视频7| 麻豆一区二区三| www.日本不卡| 欧美精品乱人伦久久久久久| 精品久久久影院| 亚洲欧美日韩国产综合| 免费欧美在线视频| 99久久精品99国产精品| 欧美一区二区成人| 国产精品国产三级国产aⅴ中文| 亚洲韩国一区二区三区| 老色鬼精品视频在线观看播放| 国产成人在线视频网站| 成人教育av在线| 欧美日韩一区二区在线观看视频| 欧美日韩国产片| 国产丝袜在线精品| 肉丝袜脚交视频一区二区| 99精品在线观看视频| 精品剧情v国产在线观看在线| 精品精品国产高清a毛片牛牛 | 国产精品网站在线播放| 亚洲精品国产精华液| 日韩成人伦理电影在线观看| 国产成人a级片| 日韩欧美123| 午夜精品久久久久久久99樱桃| 国模无码大尺度一区二区三区| 在线亚洲免费视频| 中文字幕在线观看不卡视频|