300x250
파이썬 URL, Base64 인코딩, 디코딩 GUI 구현
* 이전에 구현한 URL, Base64 인코딩, 디코딩 소스코드를 이용하여 GUI 구현
* URL, Base64 인/디코딩을 제공하는 사이트가 있으나 데이터가 서버 전송되므로 보안 우려
URL, Base64 인코딩, 디코딩 소스코드
참고 : https://lopicit.tistory.com/516
TabWidget 이용
참고 : https://lopicit.tistory.com/521
GUI 소스코드
import sys, inDecoding
from PyQt5.QtWidgets import QApplication, QWidget, QTabWidget, QHBoxLayout, QVBoxLayout, QTextEdit, QPushButton, QLabel
from PyQt5.QtGui import QIcon
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.tab1 = QWidget()
self.tab2 = QWidget()
self.tabs = QTabWidget()
self.tabs.addTab(self.tab1, 'URL')
self.tabs.addTab(self.tab2, 'Base64')
self.te1_be = QTextEdit()
self.te1_be_str = QLabel("원본 문자열")
self.te1_af = QTextEdit()
self.te1_af_str = QLabel("변환된 문자열")
self.bt1_incode = QPushButton("> URL 인코딩 >") #URL 탭
self.bt1_decode = QPushButton("< URL 디코딩 <") #Base64 탭
self.bt1_init = QPushButton("입력창 클리어") #TextEdit 클리어
#URL 탭 위젯 추가
self.tab1_layout= QHBoxLayout()
self.tab1.layout1 = QVBoxLayout()
self.tab1.vlayout = QVBoxLayout()
self.tab1.layout2 = QVBoxLayout()
self.tab1.layout1.addWidget(self.te1_be_str)
self.tab1.layout1.addWidget(self.te1_be)
self.tab1.vlayout.addWidget(self.bt1_incode)
self.tab1.vlayout.addWidget(self.bt1_decode)
self.tab1.vlayout.addWidget(self.bt1_init)
self.tab1.layout2.addWidget(self.te1_af_str)
self.tab1.layout2.addWidget(self.te1_af)
self.tab1_layout.addLayout(self.tab1.layout1)
self.tab1_layout.addLayout(self.tab1.vlayout)
self.tab1_layout.addLayout(self.tab1.layout2)
self.tab1.setLayout(self.tab1_layout)
#Base64 탭 위젯 추가
self.te2_be = QTextEdit()
self.te2_be_str = QLabel("원본 문자열")
self.te2_af = QTextEdit()
self.te2_af_str = QLabel("변환된 문자열")
self.bt2_incode = QPushButton("> Base64 인코딩 >")
self.bt2_decode = QPushButton("< Base64 디코딩 <")
self.bt2_init = QPushButton("입력창 클리어") # TextEdit 클리어
self.tab2_layout = QHBoxLayout()
self.tab2.layout1 = QVBoxLayout()
self.tab2.vlayout = QVBoxLayout()
self.tab2.layout2 = QVBoxLayout()
self.tab2.layout1.addWidget(self.te2_be_str)
self.tab2.layout1.addWidget(self.te2_be)
self.tab2.vlayout.addWidget(self.bt2_incode)
self.tab2.vlayout.addWidget(self.bt2_decode)
self.tab2.vlayout.addWidget(self.bt2_init)
self.tab2.layout2.addWidget(self.te2_af_str)
self.tab2.layout2.addWidget(self.te2_af)
self.tab2_layout.addLayout(self.tab2.layout1)
self.tab2_layout.addLayout(self.tab2.vlayout)
self.tab2_layout.addLayout(self.tab2.layout2)
self.tab2.setLayout(self.tab2_layout)
#Button 클릭 이벤트
self.bt1_incode.clicked.connect(self.urlIncoding_clicked)
self.bt1_decode.clicked.connect(self.urlDecoding_clicked)
self.bt2_incode.clicked.connect(self.baseIncoding_clicked)
self.bt2_decode.clicked.connect(self.baseDecoding_clicked)
self.bt1_init.clicked.connect(self.urlInit_clicked)
self.bt2_init.clicked.connect(self.base64Init_clicked)
#tabWidget 추가
self.vbox = QVBoxLayout()
self.vbox.addWidget(self.tabs)
self.setLayout(self.vbox)
self.setWindowTitle('문자열 변환')
#self.setWindowIcon(QIcon('cloud.png')) #favicon
self.setGeometry(300, 300, 700, 500)
self.show()
#URL인코딩 이벤트
def urlIncoding_clicked(self):
incode_data = inDecoding.url_Incoding(self.te1_be.toPlainText())
self.te1_af.setText(incode_data)
#URL디코딩 이벤트
def urlDecoding_clicked(self):
decode_data = inDecoding.url_Decoding(self.te1_af.toPlainText())
self.te1_be.setText(decode_data)
#Base64 인코딩 이벤트
def baseIncoding_clicked(self):
incode_data = inDecoding.base64_Incoding(self.te2_be.toPlainText())
self.te2_af.setText(incode_data)
#Base64 디코딩 이벤트
def baseDecoding_clicked(self):
decode_data = inDecoding.base64_Decoding(self.te2_af.toPlainText())
self.te2_be.setText(decode_data)
#URL탭 초기화 이벤트
def urlInit_clicked(self):
self.te1_be.clear()
self.te1_af.clear()
#Base64탭 초기화 이벤트
def base64Init_clicked(self):
self.te2_be.clear()
self.te2_af.clear()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
인/디코딩 소스코드
#inDecoding.py
from urllib import parse
import base64
def url_Incoding(init_str):
incoding_url = parse.quote(init_str)
return incoding_url
def url_Decoding(incode_str):
decoding_url = parse.unquote(incode_str)
return decoding_url
def base64_Incoding(init_str):
str_bytes = init_str.encode('utf-8')
str_base64 = base64.b64encode(str_bytes)
base64_str = str_base64.decode('utf-8')
return base64_str
def base64_Decoding(incode_str):
base64_str = incode_str
str_bytes = base64.b64decode(base64_str)
init_str = str_bytes.decode('utf-8')
return init_str
GUI 화면
반응형
'Python' 카테고리의 다른 글
Python) Base64 Decoding 에러 처리 - Non-base64 digit found (0) | 2022.05.09 |
---|---|
Python) Pycharm에서 Qt5 Designer 실행하기 (0) | 2022.02.05 |
Python) 파이썬 tabWidget (탭위젯) (0) | 2022.02.01 |
Python) Django 웹페이지 읽기 (0) | 2022.01.18 |
Python) 파이썬 Pycharm에서 실행파일 만들기 (0) | 2022.01.16 |