08
18

자동화에 관련된 소스를 가끔 개발하면서 스스로 부족하다고 느꼈던 부분이 바로 GUI 의 부재였습니다. 이번에 프로젝트에 참여하면서 GUI 관련된 개발이 필요했는데, 개발언어도 파이썬이었던터라 이 기회에 간단한 python gui 구성법을 익히고자 PyQt 공부를 해보게되었습니다. 이 글에서는 단순히 기본 창에서 이벤트가 주어지면 다른 창을 띄우는 기능을 구현해보고자합니다.

Pyqt가 설치된 환경이라면, 가상환경 cmd 에 designer 를 입력하는 것으로 qt designer를 실행할 수 있습니다. qt designer를 이용하면 파이썬 소스를 일일히 써가며 ui를 구성해야하는 번거로움에서 벗어날 수 있습니다.

두 개의 ui를 구성하고, 각각 저장합니다.

login.ui 의 로그인 버튼을 클릭하면 showmain 함수가 실행되어 mainWindow.ui 의 윈도우를 띄워주는 기능을 구현하겠습니다. 

 

먼저 하단의 코드는 초기에 보일 start.py 입니다.

import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
from main import mainWindow

form_class = uic.loadUiType("login.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)

    def showmain(self) :
        self.w = mainWindow()
        self.w.show()

if __name__ == "__main__" :
    app = QApplication(sys.argv) 
    myWindow = WindowClass() 
    myWindow.show()
    app.exec_()

초기 소스 형태는 https://wikidocs.net/35482 를 참고하였습니다.

login 버튼을 클릭하면 showmain 함수가 실행되도록 ui에서 설정해주었으니, showmain 함수도 만들어줍니다.

 

다음은 main.py 입니다. 상단 start.py 에서 import 했던 mainWindow 클래스가 존재합니다.

import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic


form_class = uic.loadUiType("mainwindow.ui")[0]

class mainWindow(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)


if __name__ == "__main__" :
    app = QApplication(sys.argv) 
    myWindow = mainWindow() 
    myWindow.show()
    app.exec_()

 

python start.py

잘 작동합니다.

 

 

이를 이용해 특정 환경에서 로그인 성공, 실패를 판단하고 로그인 이후 메인화면으로 이동하도록 구현이 가능할 것입니다.


 

showmain 함수를 구성하는 부분에서 self.w = mainWindow() 로 생성하지 않고 w = mainWindow() 로 생성하자 login 버튼을 눌렀을 때 mainWindow 가 떴다가 바로 종료되는 문제가 있었습니다. self 에 익숙해지는게 필요할 것 같습니다.

COMMENT