프로그램 파이썬 공부

주소 검색 메크로 프로그램 만들기

블로그하는프로그래머 2022. 2. 1. 11:52

dungbon_macro.py

 

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'dungbon_macro.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1576, 789)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(50, 110, 591, 601))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.search_lst = QtWidgets.QListWidget(self.horizontalLayoutWidget)
        self.search_lst.setObjectName("search_lst")
        self.horizontalLayout.addWidget(self.search_lst)
        self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(680, 230, 114, 91))
        self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.plus_btn = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
        self.plus_btn.setObjectName("plus_btn")
        self.horizontalLayout_2.addWidget(self.plus_btn)
        self.horizontalLayoutWidget_3 = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget_3.setGeometry(QtCore.QRect(820, 100, 541, 611))
        self.horizontalLayoutWidget_3.setObjectName("horizontalLayoutWidget_3")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_3)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.macro_lst = QtWidgets.QListView(self.horizontalLayoutWidget_3)
        self.macro_lst.setObjectName("macro_lst")
        self.horizontalLayout_3.addWidget(self.macro_lst)
        self.horizontalLayoutWidget_4 = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(680, 360, 114, 101))
        self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.minus_btn = QtWidgets.QPushButton(self.horizontalLayoutWidget_4)
        self.minus_btn.setObjectName("minus_btn")
        self.horizontalLayout_4.addWidget(self.minus_btn)
        self.horizontalLayoutWidget_5 = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget_5.setGeometry(QtCore.QRect(1390, 100, 141, 131))
        self.horizontalLayoutWidget_5.setObjectName("horizontalLayoutWidget_5")
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_5)
        self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.macro_start_btn = QtWidgets.QPushButton(self.horizontalLayoutWidget_5)
        self.macro_start_btn.setObjectName("macro_start_btn")
        self.horizontalLayout_5.addWidget(self.macro_start_btn)
        self.splitter = QtWidgets.QSplitter(self.centralwidget)
        self.splitter.setGeometry(QtCore.QRect(50, 30, 322, 34))
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.splitter.setObjectName("splitter")
        self.adress_edt = QtWidgets.QLineEdit(self.splitter)
        self.adress_edt.setObjectName("adress_edt")
        self.search_btn = QtWidgets.QPushButton(self.splitter)
        self.search_btn.setObjectName("search_btn")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1576, 31))
        self.menubar.setObjectName("menubar")
        self.menuNew = QtWidgets.QMenu(self.menubar)
        self.menuNew.setObjectName("menuNew")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionFile = QtWidgets.QAction(MainWindow)
        self.actionFile.setObjectName("actionFile")
        self.actionQuit = QtWidgets.QAction(MainWindow)
        self.actionQuit.setObjectName("actionQuit")
        self.menuNew.addAction(self.actionFile)
        self.menuNew.addAction(self.actionQuit)
        self.menubar.addAction(self.menuNew.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.plus_btn.setText(_translate("MainWindow", "->"))
        self.minus_btn.setText(_translate("MainWindow", "<-"))
        self.macro_start_btn.setText(_translate("MainWindow", "메크로 시작"))
        self.search_btn.setText(_translate("MainWindow", "주소 검색"))
        self.menuNew.setTitle(_translate("MainWindow", "New"))
        self.actionFile.setText(_translate("MainWindow", "File"))
        self.actionQuit.setText(_translate("MainWindow", "Quit"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

 

auto_macro.py

# auto_macro.py

import sys
from PyQt5 import QtWidgets
from dungbon_macro import Ui_MainWindow

# __init__ 메서드를 포함하는 새로운 파이썬 클래스를 생성 한다.
class QuitDesignerGUI():
    # 자체 파이썬 클래스를 생성한다.
    # 일반적인 이니셜라이저 부터 시작 한다.
    # 이니셜라이저 메서드가 끝날 쯤, 이니셜라이저 아래에 만들고 있는 메서드를 호출 했다.
    # 클래스를 인스턴스화만 하면 되었고, 클래스 인스턴스(개체)가 생성된 후,
    # 클래스 인스턴스에서 특정 메서드를 호출 안해도 메서드는 실행 된다.
    def __init__(self):
        app = QtWidgets.QApplication(sys.argv)
        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()   # 윈도우의 인스턴스를 생성
        self.ui.setupUi(self.MainWindow)
        self.update_widgets()
        self.widget_quit_actions()
        self.widget_button_actions()
        self.MainWindow.show()
        sys.exit(app.exec_())
   
    # 상태바를 업데이트하고 작업을 메뉴 항목에 연결하는 메서드를 만든다.
    # self.ui.actionQuit를 통해 메뉴 항목의 이름에 엑세스 한다.
    # self.ui는 "__init__"메서드에서 기본 윈도우의 인스턴스를 생성해 저장 했기에 사용할 수 있다.
    def widget_quit_actions(self):
        self.ui.actionQuit.setStatusTip(
            '클릭시 윈도우가 종료 됩니다.'
        )
        # triggered.connect(<method name>) 작업이 트리거되는 메뉴 항목의 이벤트에 연결된다.(이는 PyQt5 문법 이다.)

        # 메뉴 quit 클릭시 메서드
        self.ui.actionQuit.triggered.connect(self.close_GUI)

    def widget_button_actions(self):
        self.ui.search_btn.setStatusTip(
            '클릭시 주소를 검색합니다.'
        )
        self.ui.plus_btn.setStatusTip(
            '클릭시 주소를 추가합니다.'
        )
        self.ui.minus_btn.setStatusTip(
            '클릭시 주소를 삭제합니다.'
        )
        self.ui.macro_start_btn.setStatusTip(
            '메크로를 시작합니다.'
        )

        # 주소검색 메서드
        self.ui.search_btn.clicked.connect(self.search_Address)
        # 주소 추가 메서드
        self.ui.plus_btn.clicked.connect(self.plus_Address)
        # 주소 삭제 메서드
        self.ui.minus_btn.clicked.connect(self.minus_Address)
        # 메크로 시작 메서드
        self.ui.macro_start_btn.clicked.connect(self.macro_Start)

    # GUI를 종료하는 콜백 메서드를 작성한다.
    def close_GUI(self):
        self.MainWindow.close()
   
    # 주소를 검색 합니다.
    def search_Address(self):
        self.MainWindow.close()
   
    # 주소를 추가 합니다.
    def plus_Address(self):
        self.MainWindow.close()
   
    # 주소를 삭제 합니다.
    def minus_Address(self):
        self.MainWindow.close()
   
    # 메크로를 시작 합니다.
    def macro_Start(self):
        self.MainWindow.close()
   
    # GUI 타이틀을 업데이트하는 클래스 메서드를 작성한다.
    def update_widgets(self):
        self.MainWindow.setWindowTitle('PyQt5 GUI')

# __main__ 섹션을 사용해 클래스 인스턴스를 만든다. 이것이 GUI를 실행하기 위해 해야 한다.
if __name__ == "__main__":
    QuitDesignerGUI()