기본적인 기능은 구현이 다 됐으나, 매 번 코드를 바꿔가며 예매하기는 힘드니 UI를 만들어보자.
우선은 실행파일로 제작하고 추후 웹을 구축해볼까 한다.
Python 기반으로 제작되었기에 PyQT를 이용해서 UI를 제작한다.
속도를 위해 Qt Designer 툴을 이용하자.
UI에 들어가야할 기능은 아래와 같다.
- SRT / KTX 선택
- 로그인
- 로그인 상태 확인
- 출발역, 도착역, 시간, 날짜, 시간, 인원 등 예매 관련 정보
- 예매 시작 버튼 ( = 중단 버튼)
- 예매 시도 주기 설정
- 에러 로그 창
- 예매 시도 상태 확인 창
Qt Designer를 이용하면 .ui파일로 나오는데, 결과물로 exe나 dmg 파일을 만들고 싶으므로 .py 확장자로 변경해준다.
python -m PyQt5.uic.pyuic -x [변환대상.ui] -o [변환완료이름.py]
main.py
import sys
from PyQt5.QtWidgets import QApplication, QDialog
from srt.srt import SRT
from design import Ui_dialog
# 프로그램 메인을 담당하는 Class 선언
class UiMainClass(QDialog):
def __init__(self):
QDialog.__init__(self)
# UI 선언
main_ui = Ui_dialog()
# UI 준비
main_ui.setupUi(self)
# 화면을 보여준다.
self.show()
if __name__ == "__main__":
srt = SRT()
app = QApplication(sys.argv)
window = UiMainClass()
app.exec_()
# srt.login('1', srt_id, srt_pwd)
# schedules = srt.fetch_schedule('수서', '부산', '20240112', '053100', 1, 0, 0, 0, 0)
#
# srt.book_ticket(1, 0, 0, 0, 0, schedules[0], '000', '015', True, True)
srt 예매 관련 코드를 분리해내고, qt 코드 위와 같이 구성하고 실행하면 잘 뜨는 것을 확인할 수 있다.
이제 각 ui 요소들과 코드를 연결시키자.
main.py
import sys
import time
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QDialog, QTableWidgetItem, QRadioButton, QWidget, QHBoxLayout, QMessageBox
from design import Ui_dialog
from srt.srt import SRT
from util import *
max_error_log = 20
max_try_log = 100
class SrtThread(QThread):
reservation_func = pyqtSignal()
update_ctr_signal = pyqtSignal(int)
def __init__(self, parent):
super().__init__(parent)
self.parent = parent
self.running = False
def isRunning(self):
return self.running
def stop(self):
self.running = False
self.quit()
self.wait(3000) # 종료 대기
def run(self):
self.running = True
ctr = 0
while self.running:
ctr += 1
self.reservation_func.emit()
self.update_ctr_signal.emit(ctr)
time.sleep(float(self.parent.main_ui.doubleSpinBox_srt_delay.text()))
class UiMainClass(QDialog):
def __init__(self):
self.srt = SRT(self.error_callback, self.srt_try_callback)
self.srt_stations = self.srt.get_stations()
self.srt_thread = None
self.radiobuttons = []
self.schedules = []
self.reservation_list = []
self.reservation_idx = 0
QDialog.__init__(self)
# UI 선언
self.main_ui = Ui_dialog()
# UI 준비
self.main_ui.setupUi(self)
self.init_ui()
# 화면을 보여준다.
self.show()
def init_ui(self):
self.main_ui.label_srt_logged_in.hide()
### SRT ###
self.main_ui.comboBox_srt_adult.setCurrentIndex(1)
self.main_ui.comboBox_srt_dpt_stn.addItems(self.srt_stations.keys())
self.main_ui.comboBox_srt_arv_stn.addItems(self.srt_stations.keys())
self.main_ui.comboBox_srt_arv_stn.setCurrentIndex(1)
self.main_ui.dateTimeEdit_srt_time.setDateTime(datetime.datetime.now())
self.main_ui.pushButton_srt_reservation.setStyleSheet("QPushButton{background-color : lightblue;}")
# 로그인 타입 변경
self.main_ui.comboBox_srt_login_type.currentIndexChanged.connect(self.comboBox_srt_login_type_changed)
# 로그인
self.main_ui.pushButton_srt_login.clicked.connect(self.pushButton_srt_login_clicked)
# 열차 조회
self.main_ui.pushButton_srt_search.clicked.connect(self.pushButton_srt_search_clicked)
# 열차 예매
self.main_ui.pushButton_srt_reservation.clicked.connect(self.pushButton_srt_reservation_clicked)
def comboBox_srt_login_type_changed(self):
self.main_ui.label_srt_id.setText(self.main_ui.comboBox_srt_login_type.currentText())
def pushButton_srt_login_clicked(self):
login_type = self.main_ui.comboBox_srt_login_type.currentIndex()
srt_id = self.main_ui.lineEdit_srt_id.text()
srt_pwd = self.main_ui.lineEdit_srt_pwd.text()
if self.srt.login(str(login_type + 1), srt_id, srt_pwd):
# 로그인 성공
self.main_ui.groupBox_login.hide()
self.main_ui.label_srt_logged_in.setText(f'로그인 계정 : {srt_id}')
self.main_ui.label_srt_logged_in.show()
def pushButton_srt_search_clicked(self):
dptRsStnCdNm = self.main_ui.comboBox_srt_dpt_stn.currentText()
arvRsStnCdNm = self.main_ui.comboBox_srt_arv_stn.currentText()
dptDt = self.main_ui.dateTimeEdit_srt_time.date().toString('yyyyMMdd')
dptTm = self.main_ui.dateTimeEdit_srt_time.time().toString('HHmmss')
adult = self.main_ui.comboBox_srt_adult.currentIndex()
child = self.main_ui.comboBox_srt_child.currentIndex()
senior = self.main_ui.comboBox_srt_senior.currentIndex()
svrDsb = self.main_ui.comboBox_srt_svrDsb.currentIndex()
mldDsb = self.main_ui.comboBox_srt_mldDsb.currentIndex()
chtnDvCd = '1' # 직통
locSeatAttCd1 = self.get_srt_locSeatAttCd()
rqSeatAttCd1 = self.get_srt_rqSeatAttCd()
trnGpCd = '300' # SRT
dlayTnumAplFlg = 'Y'
if dptRsStnCdNm == arvRsStnCdNm:
self.error_callback('열차 조회 실패', '출발역과 도착역이 같습니다')
return False
self.schedules = self.srt.fetch_schedule(dptRsStnCdNm, arvRsStnCdNm, dptDt, dptTm, adult, child, senior, svrDsb,
mldDsb, chtnDvCd, locSeatAttCd1, rqSeatAttCd1, trnGpCd, dlayTnumAplFlg)
# 기차 스케쥴 초기화
self.radiobuttons = []
self.main_ui.tableWidget_srt_schedule.setRowCount(0)
for idx, schedule in enumerate(self.schedules):
dptTm = schedule['dptTm'][0:2] + ':' + schedule['dptTm'][2:4]
self.main_ui.tableWidget_srt_schedule.insertRow(idx)
self.main_ui.tableWidget_srt_schedule.setItem(idx, 0, QTableWidgetItem(str(int(schedule['trnNo']))))
self.main_ui.tableWidget_srt_schedule.setItem(idx, 1, QTableWidgetItem(schedule['dptRsStnCdNm']))
self.main_ui.tableWidget_srt_schedule.setItem(idx, 2, QTableWidgetItem(schedule['arvRsStnCdNm']))
self.main_ui.tableWidget_srt_schedule.setItem(idx, 3, QTableWidgetItem(dptTm))
self.main_ui.tableWidget_srt_schedule.item(idx, 0).setTextAlignment(Qt.AlignCenter)
self.main_ui.tableWidget_srt_schedule.item(idx, 1).setTextAlignment(Qt.AlignCenter)
self.main_ui.tableWidget_srt_schedule.item(idx, 2).setTextAlignment(Qt.AlignCenter)
self.main_ui.tableWidget_srt_schedule.item(idx, 3).setTextAlignment(Qt.AlignCenter)
radiobutton = QRadioButton()
radiobutton.setAutoExclusive(False)
self.radiobuttons.append(radiobutton)
cellWidget = QWidget()
layoutCB = QHBoxLayout(cellWidget)
layoutCB.addWidget(self.radiobuttons[-1])
layoutCB.setAlignment(Qt.AlignCenter)
layoutCB.setContentsMargins(0, 0, 0, 0)
cellWidget.setLayout(layoutCB)
self.main_ui.tableWidget_srt_schedule.setCellWidget(idx, 4, cellWidget)
def pushButton_srt_reservation_clicked(self):
if not self.srt_thread:
self.srt_thread = SrtThread(self)
self.srt_thread.reservation_func.connect(self.reservation_func)
self.srt_thread.update_ctr_signal.connect(self.update_ctr)
if self.srt_thread.isRunning(): # 동작 중일 때
self.srt_thread.stop()
self.main_ui.pushButton_srt_reservation.setStyleSheet("QPushButton{background-color : lightblue;}")
self.main_ui.pushButton_srt_reservation.setText('예매시작')
else: # 동작 중 아닐 때
self.main_ui.tableWidget_srt_try_log.setRowCount(0)
self.reservation_list = []
self.reservation_idx = 0
adult = self.main_ui.comboBox_srt_adult.currentIndex()
child = self.main_ui.comboBox_srt_child.currentIndex()
senior = self.main_ui.comboBox_srt_senior.currentIndex()
svrDsb = self.main_ui.comboBox_srt_svrDsb.currentIndex()
mldDsb = self.main_ui.comboBox_srt_mldDsb.currentIndex()
for idx, radiobutton in enumerate(self.radiobuttons):
if radiobutton.isChecked():
class_idx = self.main_ui.comboBox_srt_class.currentIndex()
if class_idx == 0 or class_idx == 2:
self.reservation_list.append({
'adult': adult,
'child': child,
'senior': senior,
'svrDsb': svrDsb,
'mldDsb': mldDsb,
'train_schedule': self.schedules[idx],
'locSeatAttCd': self.get_srt_locSeatAttCd(),
'rqSeatAttCd': self.get_srt_rqSeatAttCd(),
'isReservation': self.main_ui.radioButton_srt_waiting.isChecked(),
'isBusiness': False,
})
if class_idx == 1 or class_idx == 2:
self.reservation_list.append({
'adult': adult,
'child': child,
'senior': senior,
'svrDsb': svrDsb,
'mldDsb': mldDsb,
'train_schedule': self.schedules[idx],
'locSeatAttCd': self.get_srt_locSeatAttCd(),
'rqSeatAttCd': self.get_srt_rqSeatAttCd(),
'isReservation': self.main_ui.radioButton_srt_waiting.isChecked(),
'isBusiness': True,
})
if not self.srt.is_logged_in():
self.error_callback('예매 실패', '로그인을 먼저 해주세요')
return False
if adult + child + senior + svrDsb + mldDsb < 1:
self.error_callback('예매 실패', '인원을 선택해주세요')
return False
if not self.schedules:
self.error_callback('예매 실패', '열차 조회를 먼저 해주세요')
return False
if not self.reservation_list:
self.error_callback('예매 실패', '선택된 열차가 없습니다')
return False
self.srt_thread.start()
self.main_ui.pushButton_srt_reservation.setStyleSheet("QPushButton{background-color : red;}")
self.main_ui.pushButton_srt_reservation.setText('예매중지')
def reservation_func(self):
rsv_item = self.reservation_list[self.reservation_idx]
success = self.srt.book_ticket(
rsv_item['adult'],
rsv_item['child'],
rsv_item['senior'],
rsv_item['svrDsb'],
rsv_item['mldDsb'],
rsv_item['train_schedule'],
rsv_item['locSeatAttCd'],
rsv_item['rqSeatAttCd'],
rsv_item['isReservation'],
rsv_item['isBusiness'],
)
self.reservation_idx = (self.reservation_idx+1) % len(self.reservation_list)
if success:
self.srt_thread.stop()
self.main_ui.pushButton_srt_reservation.setStyleSheet("QPushButton{background-color : lightblue;}")
self.main_ui.pushButton_srt_reservation.setText('예매시작')
QMessageBox.about(self, '예매 성공', '10분 내에 앱에서 결제해주세요')
def get_srt_locSeatAttCd(self): # 좌석 위치
idx = self.main_ui.comboBox_srt_locSeatAttCd.currentIndex()
if idx == 0:
return "000" # default
elif idx == 1:
return "011" # 1인석
elif idx == 2:
return "012" # 창측좌석
elif idx == 3:
return "013" # 내측좌석
else:
self.error_callback('좌석 위치 인덱스 에러', f"인덱스 - {idx}")
return "000"
def get_srt_rqSeatAttCd(self): # 좌석 종류
idx = self.main_ui.comboBox_srt_rqSeatAttCd.currentIndex()
if idx == 0:
return "015" # 일반
elif idx == 1:
return "021" # 휠체어
elif idx == 2:
return "028" # 전동휠체어
else:
self.error_callback('좌석 종류 인덱스 에러', f"인덱스 - {idx}")
return "015" # 일반
def update_ctr(self, ctr):
self.main_ui.lcdNumber_srt_ctr.display(ctr)
def srt_try_callback(self, success, reason, detail_info):
self.main_ui.tableWidget_srt_try_log.insertRow(0)
self.main_ui.tableWidget_srt_try_log.setItem(0, 0, QTableWidgetItem(get_nowtime()))
self.main_ui.tableWidget_srt_try_log.setItem(0, 1, QTableWidgetItem("성공" if success else "실패"))
self.main_ui.tableWidget_srt_try_log.setItem(0, 2, QTableWidgetItem(reason))
self.main_ui.tableWidget_srt_try_log.setItem(0, 3, QTableWidgetItem(detail_info))
# 일정 개수 이상 로그가 쌓이면 삭제
if self.main_ui.tableWidget_srt_try_log.rowCount() > max_try_log:
self.main_ui.tableWidget_srt_try_log.removeRow(max_try_log)
self.main_ui.tableWidget_srt_try_log.resizeColumnToContents(0)
self.main_ui.tableWidget_srt_try_log.resizeColumnToContents(1)
self.main_ui.tableWidget_srt_try_log.resizeColumnToContents(2)
self.main_ui.tableWidget_srt_try_log.resizeRowsToContents()
def error_callback(self, type_, detail_):
self.main_ui.tableWidget_error_log.insertRow(0)
self.main_ui.tableWidget_error_log.setItem(0, 0, QTableWidgetItem(get_nowtime()))
self.main_ui.tableWidget_error_log.setItem(0, 1, QTableWidgetItem(type_))
self.main_ui.tableWidget_error_log.setItem(0, 2, QTableWidgetItem(detail_))
# 일정 개수 이상 로그가 쌓이면 삭제
if self.main_ui.tableWidget_error_log.rowCount() > max_error_log:
self.main_ui.tableWidget_error_log.removeRow(max_error_log)
self.main_ui.tableWidget_error_log.resizeColumnToContents(0)
self.main_ui.tableWidget_error_log.resizeColumnToContents(1)
self.main_ui.tableWidget_error_log.resizeRowsToContents()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = UiMainClass()
app.exec_()
design.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'design.ui'
#
# Created by: PyQt5 UI code generator 5.15.10
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_dialog(object):
def setupUi(self, dialog):
dialog.setObjectName("dialog")
dialog.resize(1191, 987)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(dialog.sizePolicy().hasHeightForWidth())
dialog.setSizePolicy(sizePolicy)
dialog.setSizeGripEnabled(False)
self.verticalLayout_2 = QtWidgets.QVBoxLayout(dialog)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.tabWidget = QtWidgets.QTabWidget(dialog)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(5)
sizePolicy.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth())
self.tabWidget.setSizePolicy(sizePolicy)
self.tabWidget.setObjectName("tabWidget")
self.tab_srt = QtWidgets.QWidget()
self.tab_srt.setEnabled(True)
self.tab_srt.setAutoFillBackground(False)
self.tab_srt.setObjectName("tab_srt")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.tab_srt)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.verticalGroupBox = QtWidgets.QGroupBox(self.tab_srt)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.verticalGroupBox.sizePolicy().hasHeightForWidth())
self.verticalGroupBox.setSizePolicy(sizePolicy)
self.verticalGroupBox.setObjectName("verticalGroupBox")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.verticalGroupBox)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.label_srt_logged_in = QtWidgets.QLabel(self.verticalGroupBox)
self.label_srt_logged_in.setEnabled(True)
font = QtGui.QFont()
font.setPointSize(20)
self.label_srt_logged_in.setFont(font)
self.label_srt_logged_in.setAlignment(QtCore.Qt.AlignCenter)
self.label_srt_logged_in.setObjectName("label_srt_logged_in")
self.verticalLayout_3.addWidget(self.label_srt_logged_in)
self.groupBox_login = QtWidgets.QGroupBox(self.verticalGroupBox)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(3)
sizePolicy.setVerticalStretch(1)
sizePolicy.setHeightForWidth(self.groupBox_login.sizePolicy().hasHeightForWidth())
self.groupBox_login.setSizePolicy(sizePolicy)
self.groupBox_login.setObjectName("groupBox_login")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.groupBox_login)
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.verticalWidget = QtWidgets.QWidget(self.groupBox_login)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.verticalWidget.sizePolicy().hasHeightForWidth())
self.verticalWidget.setSizePolicy(sizePolicy)
self.verticalWidget.setObjectName("verticalWidget")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.verticalWidget)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.comboBox_srt_login_type = QtWidgets.QComboBox(self.verticalWidget)
self.comboBox_srt_login_type.setObjectName("comboBox_srt_login_type")
self.comboBox_srt_login_type.addItem("")
self.comboBox_srt_login_type.addItem("")
self.comboBox_srt_login_type.addItem("")
self.horizontalLayout_3.addWidget(self.comboBox_srt_login_type)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_3.addItem(spacerItem)
self.verticalLayout_6.addWidget(self.verticalWidget)
self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.verticalLayout_5 = QtWidgets.QVBoxLayout()
self.verticalLayout_5.setContentsMargins(-1, -1, -1, 0)
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
self.label_srt_id = QtWidgets.QLabel(self.groupBox_login)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_srt_id.sizePolicy().hasHeightForWidth())
self.label_srt_id.setSizePolicy(sizePolicy)
self.label_srt_id.setObjectName("label_srt_id")
self.horizontalLayout_9.addWidget(self.label_srt_id)
self.lineEdit_srt_id = QtWidgets.QLineEdit(self.groupBox_login)
self.lineEdit_srt_id.setEnabled(True)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(5)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineEdit_srt_id.sizePolicy().hasHeightForWidth())
self.lineEdit_srt_id.setSizePolicy(sizePolicy)
self.lineEdit_srt_id.setObjectName("lineEdit_srt_id")
self.horizontalLayout_9.addWidget(self.lineEdit_srt_id)
self.verticalLayout_5.addLayout(self.horizontalLayout_9)
self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
self.horizontalLayout_6.setContentsMargins(-1, 0, -1, -1)
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.label_srt_pwd = QtWidgets.QLabel(self.groupBox_login)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_srt_pwd.sizePolicy().hasHeightForWidth())
self.label_srt_pwd.setSizePolicy(sizePolicy)
self.label_srt_pwd.setObjectName("label_srt_pwd")
self.horizontalLayout_6.addWidget(self.label_srt_pwd)
self.lineEdit_srt_pwd = QtWidgets.QLineEdit(self.groupBox_login)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(5)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineEdit_srt_pwd.sizePolicy().hasHeightForWidth())
self.lineEdit_srt_pwd.setSizePolicy(sizePolicy)
self.lineEdit_srt_pwd.setInputMethodHints(QtCore.Qt.ImhHiddenText|QtCore.Qt.ImhNoAutoUppercase|QtCore.Qt.ImhNoPredictiveText|QtCore.Qt.ImhSensitiveData)
self.lineEdit_srt_pwd.setEchoMode(QtWidgets.QLineEdit.Password)
self.lineEdit_srt_pwd.setObjectName("lineEdit_srt_pwd")
self.horizontalLayout_6.addWidget(self.lineEdit_srt_pwd)
self.verticalLayout_5.addLayout(self.horizontalLayout_6)
self.horizontalLayout_5.addLayout(self.verticalLayout_5)
self.pushButton_srt_login = QtWidgets.QPushButton(self.groupBox_login)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton_srt_login.sizePolicy().hasHeightForWidth())
self.pushButton_srt_login.setSizePolicy(sizePolicy)
self.pushButton_srt_login.setObjectName("pushButton_srt_login")
self.horizontalLayout_5.addWidget(self.pushButton_srt_login)
self.verticalLayout_6.addLayout(self.horizontalLayout_5)
self.verticalLayout_3.addWidget(self.groupBox_login)
self.groupBox_4 = QtWidgets.QGroupBox(self.verticalGroupBox)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(1)
sizePolicy.setHeightForWidth(self.groupBox_4.sizePolicy().hasHeightForWidth())
self.groupBox_4.setSizePolicy(sizePolicy)
self.groupBox_4.setObjectName("groupBox_4")
self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.groupBox_4)
self.verticalLayout_7.setObjectName("verticalLayout_7")
self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
self.horizontalLayout_10.setObjectName("horizontalLayout_10")
self.comboBox_srt_class = QtWidgets.QComboBox(self.groupBox_4)
self.comboBox_srt_class.setObjectName("comboBox_srt_class")
self.comboBox_srt_class.addItem("")
self.comboBox_srt_class.addItem("")
self.comboBox_srt_class.addItem("")
self.horizontalLayout_10.addWidget(self.comboBox_srt_class)
self.radioButton_srt_waiting = QtWidgets.QRadioButton(self.groupBox_4)
self.radioButton_srt_waiting.setObjectName("radioButton_srt_waiting")
self.horizontalLayout_10.addWidget(self.radioButton_srt_waiting)
self.horizontalLayout_16 = QtWidgets.QHBoxLayout()
self.horizontalLayout_16.setObjectName("horizontalLayout_16")
self.label_5 = QtWidgets.QLabel(self.groupBox_4)
self.label_5.setObjectName("label_5")
self.horizontalLayout_16.addWidget(self.label_5)
self.doubleSpinBox_srt_delay = QtWidgets.QDoubleSpinBox(self.groupBox_4)
self.doubleSpinBox_srt_delay.setInputMethodHints(QtCore.Qt.ImhDigitsOnly|QtCore.Qt.ImhFormattedNumbersOnly)
self.doubleSpinBox_srt_delay.setDecimals(1)
self.doubleSpinBox_srt_delay.setSingleStep(0.2)
self.doubleSpinBox_srt_delay.setProperty("value", 2.0)
self.doubleSpinBox_srt_delay.setObjectName("doubleSpinBox_srt_delay")
self.horizontalLayout_16.addWidget(self.doubleSpinBox_srt_delay)
self.label_6 = QtWidgets.QLabel(self.groupBox_4)
self.label_6.setObjectName("label_6")
self.horizontalLayout_16.addWidget(self.label_6)
self.horizontalLayout_10.addLayout(self.horizontalLayout_16)
self.verticalLayout_7.addLayout(self.horizontalLayout_10)
self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
self.horizontalLayout_12.setObjectName("horizontalLayout_12")
self.comboBox_srt_adult = QtWidgets.QComboBox(self.groupBox_4)
self.comboBox_srt_adult.setObjectName("comboBox_srt_adult")
self.comboBox_srt_adult.addItem("")
self.comboBox_srt_adult.addItem("")
self.comboBox_srt_adult.addItem("")
self.comboBox_srt_adult.addItem("")
self.comboBox_srt_adult.addItem("")
self.comboBox_srt_adult.addItem("")
self.comboBox_srt_adult.addItem("")
self.comboBox_srt_adult.addItem("")
self.comboBox_srt_adult.addItem("")
self.comboBox_srt_adult.addItem("")
self.horizontalLayout_12.addWidget(self.comboBox_srt_adult)
self.comboBox_srt_child = QtWidgets.QComboBox(self.groupBox_4)
self.comboBox_srt_child.setObjectName("comboBox_srt_child")
self.comboBox_srt_child.addItem("")
self.comboBox_srt_child.addItem("")
self.comboBox_srt_child.addItem("")
self.comboBox_srt_child.addItem("")
self.comboBox_srt_child.addItem("")
self.comboBox_srt_child.addItem("")
self.comboBox_srt_child.addItem("")
self.comboBox_srt_child.addItem("")
self.comboBox_srt_child.addItem("")
self.comboBox_srt_child.addItem("")
self.horizontalLayout_12.addWidget(self.comboBox_srt_child)
self.comboBox_srt_senior = QtWidgets.QComboBox(self.groupBox_4)
self.comboBox_srt_senior.setObjectName("comboBox_srt_senior")
self.comboBox_srt_senior.addItem("")
self.comboBox_srt_senior.addItem("")
self.comboBox_srt_senior.addItem("")
self.comboBox_srt_senior.addItem("")
self.comboBox_srt_senior.addItem("")
self.comboBox_srt_senior.addItem("")
self.comboBox_srt_senior.addItem("")
self.comboBox_srt_senior.addItem("")
self.comboBox_srt_senior.addItem("")
self.comboBox_srt_senior.addItem("")
self.horizontalLayout_12.addWidget(self.comboBox_srt_senior)
self.comboBox_srt_svrDsb = QtWidgets.QComboBox(self.groupBox_4)
self.comboBox_srt_svrDsb.setObjectName("comboBox_srt_svrDsb")
self.comboBox_srt_svrDsb.addItem("")
self.comboBox_srt_svrDsb.addItem("")
self.comboBox_srt_svrDsb.addItem("")
self.comboBox_srt_svrDsb.addItem("")
self.comboBox_srt_svrDsb.addItem("")
self.comboBox_srt_svrDsb.addItem("")
self.comboBox_srt_svrDsb.addItem("")
self.comboBox_srt_svrDsb.addItem("")
self.comboBox_srt_svrDsb.addItem("")
self.comboBox_srt_svrDsb.addItem("")
self.horizontalLayout_12.addWidget(self.comboBox_srt_svrDsb)
self.comboBox_srt_mldDsb = QtWidgets.QComboBox(self.groupBox_4)
self.comboBox_srt_mldDsb.setObjectName("comboBox_srt_mldDsb")
self.comboBox_srt_mldDsb.addItem("")
self.comboBox_srt_mldDsb.addItem("")
self.comboBox_srt_mldDsb.addItem("")
self.comboBox_srt_mldDsb.addItem("")
self.comboBox_srt_mldDsb.addItem("")
self.comboBox_srt_mldDsb.addItem("")
self.comboBox_srt_mldDsb.addItem("")
self.comboBox_srt_mldDsb.addItem("")
self.comboBox_srt_mldDsb.addItem("")
self.comboBox_srt_mldDsb.addItem("")
self.horizontalLayout_12.addWidget(self.comboBox_srt_mldDsb)
self.verticalLayout_7.addLayout(self.horizontalLayout_12)
self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
self.horizontalLayout_11.setContentsMargins(-1, -1, -1, 0)
self.horizontalLayout_11.setObjectName("horizontalLayout_11")
self.comboBox_srt_locSeatAttCd = QtWidgets.QComboBox(self.groupBox_4)
self.comboBox_srt_locSeatAttCd.setObjectName("comboBox_srt_locSeatAttCd")
self.comboBox_srt_locSeatAttCd.addItem("")
self.comboBox_srt_locSeatAttCd.addItem("")
self.comboBox_srt_locSeatAttCd.addItem("")
self.comboBox_srt_locSeatAttCd.addItem("")
self.horizontalLayout_11.addWidget(self.comboBox_srt_locSeatAttCd)
self.comboBox_srt_rqSeatAttCd = QtWidgets.QComboBox(self.groupBox_4)
self.comboBox_srt_rqSeatAttCd.setObjectName("comboBox_srt_rqSeatAttCd")
self.comboBox_srt_rqSeatAttCd.addItem("")
self.comboBox_srt_rqSeatAttCd.addItem("")
self.comboBox_srt_rqSeatAttCd.addItem("")
self.horizontalLayout_11.addWidget(self.comboBox_srt_rqSeatAttCd)
self.verticalLayout_7.addLayout(self.horizontalLayout_11)
self.verticalLayout_3.addWidget(self.groupBox_4)
self.groupBox_5 = QtWidgets.QGroupBox(self.verticalGroupBox)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(2)
sizePolicy.setHeightForWidth(self.groupBox_5.sizePolicy().hasHeightForWidth())
self.groupBox_5.setSizePolicy(sizePolicy)
self.groupBox_5.setObjectName("groupBox_5")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.groupBox_5)
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
self.horizontalLayout_13.setObjectName("horizontalLayout_13")
self.comboBox_srt_dpt_stn = QtWidgets.QComboBox(self.groupBox_5)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.comboBox_srt_dpt_stn.sizePolicy().hasHeightForWidth())
self.comboBox_srt_dpt_stn.setSizePolicy(sizePolicy)
self.comboBox_srt_dpt_stn.setObjectName("comboBox_srt_dpt_stn")
self.horizontalLayout_13.addWidget(self.comboBox_srt_dpt_stn)
self.label_3 = QtWidgets.QLabel(self.groupBox_5)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth())
self.label_3.setSizePolicy(sizePolicy)
self.label_3.setObjectName("label_3")
self.horizontalLayout_13.addWidget(self.label_3)
self.comboBox_srt_arv_stn = QtWidgets.QComboBox(self.groupBox_5)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.comboBox_srt_arv_stn.sizePolicy().hasHeightForWidth())
self.comboBox_srt_arv_stn.setSizePolicy(sizePolicy)
self.comboBox_srt_arv_stn.setObjectName("comboBox_srt_arv_stn")
self.horizontalLayout_13.addWidget(self.comboBox_srt_arv_stn)
self.verticalLayout_8.addLayout(self.horizontalLayout_13)
self.horizontalLayout_15 = QtWidgets.QHBoxLayout()
self.horizontalLayout_15.setContentsMargins(-1, -1, -1, 0)
self.horizontalLayout_15.setObjectName("horizontalLayout_15")
self.label_4 = QtWidgets.QLabel(self.groupBox_5)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth())
self.label_4.setSizePolicy(sizePolicy)
self.label_4.setObjectName("label_4")
self.horizontalLayout_15.addWidget(self.label_4)
self.dateTimeEdit_srt_time = QtWidgets.QDateTimeEdit(self.groupBox_5)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(2)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.dateTimeEdit_srt_time.sizePolicy().hasHeightForWidth())
self.dateTimeEdit_srt_time.setSizePolicy(sizePolicy)
self.dateTimeEdit_srt_time.setCalendarPopup(False)
self.dateTimeEdit_srt_time.setObjectName("dateTimeEdit_srt_time")
self.horizontalLayout_15.addWidget(self.dateTimeEdit_srt_time)
self.verticalLayout_8.addLayout(self.horizontalLayout_15)
self.pushButton_srt_search = QtWidgets.QPushButton(self.groupBox_5)
self.pushButton_srt_search.setObjectName("pushButton_srt_search")
self.verticalLayout_8.addWidget(self.pushButton_srt_search)
self.tableWidget_srt_schedule = QtWidgets.QTableWidget(self.groupBox_5)
self.tableWidget_srt_schedule.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.tableWidget_srt_schedule.setObjectName("tableWidget_srt_schedule")
self.tableWidget_srt_schedule.setColumnCount(5)
self.tableWidget_srt_schedule.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_srt_schedule.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_srt_schedule.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_srt_schedule.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_srt_schedule.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_srt_schedule.setHorizontalHeaderItem(4, item)
self.tableWidget_srt_schedule.horizontalHeader().setStretchLastSection(True)
self.verticalLayout_8.addWidget(self.tableWidget_srt_schedule)
self.verticalLayout_3.addWidget(self.groupBox_5)
self.pushButton_srt_reservation = QtWidgets.QPushButton(self.verticalGroupBox)
self.pushButton_srt_reservation.setAutoFillBackground(False)
self.pushButton_srt_reservation.setObjectName("pushButton_srt_reservation")
self.verticalLayout_3.addWidget(self.pushButton_srt_reservation)
self.horizontalLayout_4.addWidget(self.verticalGroupBox)
self.groupBox_2 = QtWidgets.QGroupBox(self.tab_srt)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.groupBox_2.sizePolicy().hasHeightForWidth())
self.groupBox_2.setSizePolicy(sizePolicy)
self.groupBox_2.setObjectName("groupBox_2")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_2)
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.horizontalLayout_17 = QtWidgets.QHBoxLayout()
self.horizontalLayout_17.setContentsMargins(-1, -1, -1, 0)
self.horizontalLayout_17.setObjectName("horizontalLayout_17")
self.label_7 = QtWidgets.QLabel(self.groupBox_2)
self.label_7.setObjectName("label_7")
self.horizontalLayout_17.addWidget(self.label_7)
self.lcdNumber_srt_ctr = QtWidgets.QLCDNumber(self.groupBox_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lcdNumber_srt_ctr.sizePolicy().hasHeightForWidth())
self.lcdNumber_srt_ctr.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(13)
self.lcdNumber_srt_ctr.setFont(font)
self.lcdNumber_srt_ctr.setSegmentStyle(QtWidgets.QLCDNumber.Flat)
self.lcdNumber_srt_ctr.setObjectName("lcdNumber_srt_ctr")
self.horizontalLayout_17.addWidget(self.lcdNumber_srt_ctr)
self.verticalLayout_4.addLayout(self.horizontalLayout_17)
self.tableWidget_srt_try_log = QtWidgets.QTableWidget(self.groupBox_2)
self.tableWidget_srt_try_log.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.tableWidget_srt_try_log.setObjectName("tableWidget_srt_try_log")
self.tableWidget_srt_try_log.setColumnCount(4)
self.tableWidget_srt_try_log.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_srt_try_log.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_srt_try_log.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_srt_try_log.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_srt_try_log.setHorizontalHeaderItem(3, item)
self.tableWidget_srt_try_log.horizontalHeader().setStretchLastSection(True)
self.verticalLayout_4.addWidget(self.tableWidget_srt_try_log)
self.horizontalLayout_4.addWidget(self.groupBox_2)
self.tabWidget.addTab(self.tab_srt, "")
self.tab_ktx = QtWidgets.QWidget()
self.tab_ktx.setObjectName("tab_ktx")
self.tabWidget.addTab(self.tab_ktx, "")
self.verticalLayout_2.addWidget(self.tabWidget)
self.groupBox = QtWidgets.QGroupBox(dialog)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(1)
sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
self.groupBox.setSizePolicy(sizePolicy)
self.groupBox.setObjectName("groupBox")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.tableWidget_error_log = QtWidgets.QTableWidget(self.groupBox)
self.tableWidget_error_log.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.tableWidget_error_log.setObjectName("tableWidget_error_log")
self.tableWidget_error_log.setColumnCount(3)
self.tableWidget_error_log.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_error_log.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_error_log.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_error_log.setHorizontalHeaderItem(2, item)
self.tableWidget_error_log.horizontalHeader().setStretchLastSection(True)
self.tableWidget_error_log.verticalHeader().setStretchLastSection(False)
self.horizontalLayout.addWidget(self.tableWidget_error_log)
self.verticalLayout_2.addWidget(self.groupBox)
self.retranslateUi(dialog)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(dialog)
def retranslateUi(self, dialog):
_translate = QtCore.QCoreApplication.translate
dialog.setWindowTitle(_translate("dialog", "기차표 예매 프로그램"))
self.label_srt_logged_in.setText(_translate("dialog", "로그인 계정"))
self.groupBox_login.setTitle(_translate("dialog", "로그인"))
self.comboBox_srt_login_type.setItemText(0, _translate("dialog", "회원번호"))
self.comboBox_srt_login_type.setItemText(1, _translate("dialog", "이메일"))
self.comboBox_srt_login_type.setItemText(2, _translate("dialog", "휴대전화"))
self.label_srt_id.setText(_translate("dialog", "회원번호"))
self.label_srt_pwd.setText(_translate("dialog", "비밀번호"))
self.pushButton_srt_login.setText(_translate("dialog", "로그인"))
self.groupBox_4.setTitle(_translate("dialog", "환경설정"))
self.comboBox_srt_class.setItemText(0, _translate("dialog", "일반실"))
self.comboBox_srt_class.setItemText(1, _translate("dialog", "특실"))
self.comboBox_srt_class.setItemText(2, _translate("dialog", "일반실+특실"))
self.radioButton_srt_waiting.setText(_translate("dialog", "예약대기 신청"))
self.label_5.setText(_translate("dialog", "예매 시도 주기"))
self.label_6.setText(_translate("dialog", "초"))
self.comboBox_srt_adult.setCurrentText(_translate("dialog", "성인 1명"))
self.comboBox_srt_adult.setItemText(0, _translate("dialog", "성인 0명"))
self.comboBox_srt_adult.setItemText(1, _translate("dialog", "성인 1명"))
self.comboBox_srt_adult.setItemText(2, _translate("dialog", "성인 2명"))
self.comboBox_srt_adult.setItemText(3, _translate("dialog", "성인 3명"))
self.comboBox_srt_adult.setItemText(4, _translate("dialog", "성인 4명"))
self.comboBox_srt_adult.setItemText(5, _translate("dialog", "성인 5명"))
self.comboBox_srt_adult.setItemText(6, _translate("dialog", "성임 6명"))
self.comboBox_srt_adult.setItemText(7, _translate("dialog", "성인 7명"))
self.comboBox_srt_adult.setItemText(8, _translate("dialog", "성인 8명"))
self.comboBox_srt_adult.setItemText(9, _translate("dialog", "성인 9명"))
self.comboBox_srt_child.setItemText(0, _translate("dialog", "어린이 0명"))
self.comboBox_srt_child.setItemText(1, _translate("dialog", "어린이 1명"))
self.comboBox_srt_child.setItemText(2, _translate("dialog", "어린이 2명"))
self.comboBox_srt_child.setItemText(3, _translate("dialog", "어린이 3명"))
self.comboBox_srt_child.setItemText(4, _translate("dialog", "어린이 4명"))
self.comboBox_srt_child.setItemText(5, _translate("dialog", "어린이 5명"))
self.comboBox_srt_child.setItemText(6, _translate("dialog", "어린이 6명"))
self.comboBox_srt_child.setItemText(7, _translate("dialog", "어린이 7명"))
self.comboBox_srt_child.setItemText(8, _translate("dialog", "어린이 8명"))
self.comboBox_srt_child.setItemText(9, _translate("dialog", "어린이 9명"))
self.comboBox_srt_senior.setItemText(0, _translate("dialog", "노인 0명"))
self.comboBox_srt_senior.setItemText(1, _translate("dialog", "노인 1명"))
self.comboBox_srt_senior.setItemText(2, _translate("dialog", "노인 2명"))
self.comboBox_srt_senior.setItemText(3, _translate("dialog", "노인 3명"))
self.comboBox_srt_senior.setItemText(4, _translate("dialog", "노인 4명"))
self.comboBox_srt_senior.setItemText(5, _translate("dialog", "노인 5명"))
self.comboBox_srt_senior.setItemText(6, _translate("dialog", "노인 6명"))
self.comboBox_srt_senior.setItemText(7, _translate("dialog", "노인 7명"))
self.comboBox_srt_senior.setItemText(8, _translate("dialog", "노인 8명"))
self.comboBox_srt_senior.setItemText(9, _translate("dialog", "노인 9명"))
self.comboBox_srt_svrDsb.setItemText(0, _translate("dialog", "중증장애인 0명"))
self.comboBox_srt_svrDsb.setItemText(1, _translate("dialog", "중증장애인 1명"))
self.comboBox_srt_svrDsb.setItemText(2, _translate("dialog", "중증장애인 2명"))
self.comboBox_srt_svrDsb.setItemText(3, _translate("dialog", "중증장애인 3명"))
self.comboBox_srt_svrDsb.setItemText(4, _translate("dialog", "중증장애인 4명"))
self.comboBox_srt_svrDsb.setItemText(5, _translate("dialog", "중증장애인 5명"))
self.comboBox_srt_svrDsb.setItemText(6, _translate("dialog", "중증장애인 6명"))
self.comboBox_srt_svrDsb.setItemText(7, _translate("dialog", "중증장애인 7명"))
self.comboBox_srt_svrDsb.setItemText(8, _translate("dialog", "중증장애인 8명"))
self.comboBox_srt_svrDsb.setItemText(9, _translate("dialog", "중증장애인 9명"))
self.comboBox_srt_mldDsb.setItemText(0, _translate("dialog", "경증장애인 0명"))
self.comboBox_srt_mldDsb.setItemText(1, _translate("dialog", "경증장애인 1명"))
self.comboBox_srt_mldDsb.setItemText(2, _translate("dialog", "경증장애인 2명"))
self.comboBox_srt_mldDsb.setItemText(3, _translate("dialog", "경증장애인 3명"))
self.comboBox_srt_mldDsb.setItemText(4, _translate("dialog", "경증장애인 4명"))
self.comboBox_srt_mldDsb.setItemText(5, _translate("dialog", "경증장애인 5명"))
self.comboBox_srt_mldDsb.setItemText(6, _translate("dialog", "경증장애인 6명"))
self.comboBox_srt_mldDsb.setItemText(7, _translate("dialog", "경증장애인 7명"))
self.comboBox_srt_mldDsb.setItemText(8, _translate("dialog", "경증장애인 8명"))
self.comboBox_srt_mldDsb.setItemText(9, _translate("dialog", "경증장애인 9명"))
self.comboBox_srt_locSeatAttCd.setItemText(0, _translate("dialog", "모든좌석"))
self.comboBox_srt_locSeatAttCd.setItemText(1, _translate("dialog", "1인석"))
self.comboBox_srt_locSeatAttCd.setItemText(2, _translate("dialog", "창측좌석"))
self.comboBox_srt_locSeatAttCd.setItemText(3, _translate("dialog", "내측좌석"))
self.comboBox_srt_rqSeatAttCd.setItemText(0, _translate("dialog", "일반석"))
self.comboBox_srt_rqSeatAttCd.setItemText(1, _translate("dialog", "휠체어"))
self.comboBox_srt_rqSeatAttCd.setItemText(2, _translate("dialog", "전동휠체어"))
self.groupBox_5.setTitle(_translate("dialog", "열차 선택"))
self.label_3.setText(_translate("dialog", "⇀"))
self.label_4.setText(_translate("dialog", "출발시각 "))
self.dateTimeEdit_srt_time.setDisplayFormat(_translate("dialog", "yyyy. M. d. AP h:mm"))
self.pushButton_srt_search.setText(_translate("dialog", "조회"))
item = self.tableWidget_srt_schedule.horizontalHeaderItem(0)
item.setText(_translate("dialog", "열차번호"))
item = self.tableWidget_srt_schedule.horizontalHeaderItem(1)
item.setText(_translate("dialog", "출발역"))
item = self.tableWidget_srt_schedule.horizontalHeaderItem(2)
item.setText(_translate("dialog", "도착역"))
item = self.tableWidget_srt_schedule.horizontalHeaderItem(3)
item.setText(_translate("dialog", "출발시간"))
item = self.tableWidget_srt_schedule.horizontalHeaderItem(4)
item.setText(_translate("dialog", "예매하기"))
self.pushButton_srt_reservation.setText(_translate("dialog", "예매시작"))
self.groupBox_2.setTitle(_translate("dialog", "예매 로그"))
self.label_7.setText(_translate("dialog", "예매 시도 횟수"))
item = self.tableWidget_srt_try_log.horizontalHeaderItem(0)
item.setText(_translate("dialog", "시간"))
item = self.tableWidget_srt_try_log.horizontalHeaderItem(1)
item.setText(_translate("dialog", "결과"))
item = self.tableWidget_srt_try_log.horizontalHeaderItem(2)
item.setText(_translate("dialog", "사유"))
item = self.tableWidget_srt_try_log.horizontalHeaderItem(3)
item.setText(_translate("dialog", "예매정보"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_srt), _translate("dialog", "SRT"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_ktx), _translate("dialog", "KTX"))
self.groupBox.setTitle(_translate("dialog", "에러 로그"))
item = self.tableWidget_error_log.horizontalHeaderItem(0)
item.setText(_translate("dialog", "시간"))
item = self.tableWidget_error_log.horizontalHeaderItem(1)
item.setText(_translate("dialog", "타입"))
item = self.tableWidget_error_log.horizontalHeaderItem(2)
item.setText(_translate("dialog", "상세 정보"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
dialog = QtWidgets.QDialog()
ui = Ui_dialog()
ui.setupUi(dialog)
dialog.show()
sys.exit(app.exec_())
자! 코드가 완성되었으니 테스트해보자~~
로그인을 하고, 원하는 열차를 조회해보자
예매하고 싶은 열차를 선택 후, 예매시작을 누르면 잘 동작한다...!
빈자리를 예약하는데 성공하면 아래와 같이 팝업이 뜬다..!
이번에 작업한 내용은 코드가 상당히 많다.
깃헙에 업데이트했으니 깃헙에서 전체 코드가 다운 가능하다!
https://github.com/dhgwag/train_reservation
[참고 사이트]
[Python/PyQt] UI 생성 및 연결 | Python GUI 프로그램
[Python/PyQt] PyQt UI 생성 및 연결 | Python GUI 프로그램 원래 작성된 문서를 티스토리로 옮기는 문서입니다. 개요 PyQt란, Qt의 레이아웃에 Python의 코드를 연결하여 GUI 프로그램을 만들 수 있게 도와주
jiwift.tistory.com
'프로젝트 > SRT&KTX 매진표 예매' 카테고리의 다른 글
SRT&KTX 기차표 매크로 예매 - (7) 실행파일 만들기 (PyInstaller) (0) | 2024.01.12 |
---|---|
SRT&KTX 기차표 매크로 예매 - (6) 아이디/비밀번호 저장하기 (0) | 2024.01.12 |
SRT&KTX 기차표 매크로 예매 - (4) SRT 승차권 예매 (1) | 2024.01.09 |
SRT&KTX 기차표 매크로 예매 - (3) SRT 승차권 조회 (2) | 2024.01.09 |
SRT&KTX 기차표 매크로 예매 - (2) SRT 로그인 (1) | 2024.01.08 |