Python

Python) 파이썬 URL, Base64 인코딩, 디코딩 GUI 구현

로픽 2022. 2. 3. 02:00
300x250

파이썬 URL, Base64 인코딩, 디코딩 GUI 구현

 

* 이전에 구현한 URL, Base64 인코딩, 디코딩 소스코드를 이용하여 GUI 구현

* URL, Base64 인/디코딩을 제공하는 사이트가 있으나 데이터가 서버 전송되므로 보안 우려

 

URL, Base64 인코딩, 디코딩 소스코드

참고 : https://lopicit.tistory.com/516

 

Python) 파이썬 URL, Base64 인코딩 디코딩

파이썬 URL, Base64 인코딩 디코딩 파이썬 URL 및 Base64 인코딩/디코딩 방법 * 핵심코드 # URL 인/디코딩 from urllib import parse incoding_url = parse.quote("초기문자열") # URL Incoding decoding_url..

lopicit.tistory.com

 

TabWidget 이용

참고 : https://lopicit.tistory.com/521

 

Python) 파이썬 tabWidget (탭위젯)

Python) 파이썬 tabWidget (탭위젯) * Pycharm 실행 시 pyqt5 패키지 설치 필요. 출처 : https://wikidocs.net/33707 11) QTabWidget ![](https://wikidocs.net/images/page/33707/4_11_qtabwidget_sample.png) GU..

lopicit.tistory.com


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 화면

 

 

 

 

반응형