MapleStory Finger Point

Development/GUI

PyQt5 메뉴바 클릭 시 텍스트 변경해보기

吳鍾振 2020. 9. 21. 23:34

PyQt5를 공부하면서 메뉴바를 가지고 이리저리 가지고 놀아보았는데, 클릭 시 텍스트가 바뀌면 어떨까 해서 한번 만들어보았다.

이번에는 PyQt5를 더 효율적이고 쉽게 사용할 수 있는 방법 중에 하나인 "Qt Designer"를 사용하여 만들어 보았다.

Qt Designer를 처음 쓸 때는 어떻게 적용하는지 애를 먹었는데, 점점 사용법을 익히다 보니 GUI(Graphical User Interface)를 만들 때 이렇게 편할 수가 없다.

Designer를 처음 실행하면 다음과 같은 화면이 나오게 되는데,

Form 선택 창

나는 Main Window를 선택하여 만들었다.

Main Window를 선택하고 Create를 누르게 되면,

정품인증하고 싶어요

이제 자유롭게 GUI를 만들 수 있는 화면이 나온다.

내부 윈도우의 상단을 자세히 보면 'Type Here'라는 글씨가 보이는데, 적고 싶은 글을 입력한다. 그리고 엔터를 누르면

메뉴바가 생성되고, 추가 세부 메뉴를 더 생성할 수 있다. 본인은 추가로 하나 더 생성해보았다.

그러면 Menu라는 메뉴바에 Hey라는 세부 메뉴가 나오게 된다.

여기까지 생성해주고 이제 ui 파일을 py 파일로 생성해야 한다. 우선 ui 파일을 저장해둔다.

그리고 저장한 ui 파일의 위치를 기억하고, cmd 창을 연다.

ui 파일이 저장된 경로로 들어가 주고, pyuic5 -x ui파일 -o 출력될 py파일을 입력한다. 아래와 같이

사생활

그러면 다음과 같이 만들어진다!

만들어진 파일을 열어보게 되면..

자동으로 PyQt5 창이 만들어졌다! 실행시켜 보자.

이제 준비는 끝났고 본격적으로 클릭 시 텍스트가 바뀌게 해 보자.

 

우선 만들어진 파일과 같은 경로에 파이썬 파일을 하나 생성한다.
그리고 다음 코드를 작성한다.

from PyQt5 import QtWidgets
from test_window import Ui_MainWindow


class testMainWindow(Ui_MainWindow):
    def __init__(self):
        super().__init__()

    def setupUi(self, MainWindow):
        super().setupUi(MainWindow)

        self.actionHey.triggered.connect(self.convert)

    def convert(self):
        if self.actionHey.text() == "Hey":
            self.actionHey.setText("you!")

        elif self.actionHey.text() == "you!":
            self.actionHey.setText("Hey")


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

 

- 코드 설명 -

from PyQt5 import QtWidgets
from test_window import Ui_MainWindow

PyQt5 window를 제어하기 위해서 PyQt5의 QtWidgets 모듈을 import 한다.
그리고 출력된 파이썬 파일에서 클래스 이름을 import 시킨다. 본인은 출력한 파일명을 test_window으로 하였다.
아마 똑같이 하셨으면 클래스 이름이 Ui_MainWindow가 맞을 것이다.

class testMainWindow(Ui_MainWindow):
    def __init__(self):
        super().__init__()

    def setupUi(self, MainWindow):
        super().setupUi(MainWindow)

        self.actionHey.triggered.connect(self.convert)

    def convert(self):
        if self.actionHey.text() == "Hey":
            self.actionHey.setText("you!")

        elif self.actionHey.text() == "you!":
            self.actionHey.setText("Hey")

그다음엔 클래스를 만들고, __init__ 함수와 setupUi 함수를 선언한다.
setupUi 함수에서, 글씨를 바꿀 메뉴바를 누르면 작동될 함수를 설정한다.

self.actionHey.triggered.connect(self.convert)
이 부분인데, 본인은 생성할 때 Hey라는 이름으로 만들었기 때문에 actionHey라는 이름을 가지고 있고, 클릭 시 convert라는 이름의 함수와 연결시켜 준다는 뜻.

convert 함수에서 if와 elif 구문을 사용하였다.
만약 메뉴바의 텍스트가 Hey라면, 클릭 시 you! 라고 설정하고
메뉴바의 텍스트가 you!라면, 클릭 시 Hey라고 설정한다.

 

클릭하면
바뀐다!

다시 또 클릭해도 또 바뀐다.

끝.

 

??? : Yeah you

반응형

'Development > GUI' 카테고리의 다른 글

QSettings 로그인 알고리즘  (2) 2023.02.21
QSettings 사용 예제 코드  (0) 2022.07.26
PyQt5 이미지 비율 맞추기  (0) 2022.06.20
PyQt5 버튼 애니메이션  (0) 2022.06.15
PyQt5 종료 Fade out 이벤트  (0) 2021.07.08