개인 프로젝트/Accounting Program

#5 메인 윈도우(Main Window)

Scala0114 2021. 10. 17. 14:51

지금까진 윈도우를 띄우고 최상위 위젯에 다른 위젯들을 붙이는 등 간단한 PySide의 사용법을 알아봤다.

이번에는 좀더 일반적인 애플리케이션다운 형태로 처음부터 다시 화면을 구성해보자.

 

1. 메인 윈도우(Main Window)

 QMainWindow 위젯은 우리가 일반적으로 보게되는 윈도우 애플리케이션의 기본프레임을 갖춘 위젯이다.

메인 윈도우는 위와 같이 Menu Bar, Tool Bars, Dock Widgets, Central Widgets, Status Bar 의 영역들을 가지고있다.

Central Widgets 영역에는 우리가 원하는 어떤 위젯이든 위치시킬 수 있다.

 

 

2. 상태표시줄(Status Bar) 만들기

QMainWindow 위젯을 import 하고 MyApp 이 QWidget 대신 QMainWindow 를 상속하도록 변경한다.

self.statusBar().showMessage 메소드를 호출하여 Ready 라는 메시지를 상태표시줄에 출력하도록 해보자.

 

하단 상태표시줄에 Ready 가 출력된 것을 볼 수 있다. 

 

showMessage 에서 timeout 인자에 정수값을 주면 지정된 시간만큼만(1000 = 1초) 메시지가 표시되고 사라진다.

clearMessage 를 호출해도 메시지를 사라지게할 수 있다.

QStatusBar 는 표시된 메시지가 변경될 때 마다 messageChanged 시그널을 발생시킨다.

 

 

 

3. 메뉴바(Menu Bar) 만들기

 다음으로 메뉴바를 추가해보자. 저장, 설정, 인쇄, 편집 등 윈도우 애플리케이션의 거의 모든 기능들은 메뉴바에서

접근 가능하도록 되어있는 경우가 많기때문에 매우 중요한 부분이다.

 

MyApp 위젯에 menuBar 메소드를 호출하여 메뉴바를 만들고 addMenu 메소드를 호출하여 File 이라는 메뉴를

생성하였다. &File 과 같이 특정 문자앞에& 기호를 붙이면 Alt+<해당문자> 단축키로 그 메뉴에 접근할 수 있다.

 

이제 File 메뉴에 액션을 추가해보자.  QAction 클래스를 import 하여 프로그램을 종료하는 액션을 생성한다.

종료액션을 나타낼 아이콘이미지를 구해서 exit_icon.png 로 src/img/ 디렉토리에 저장하고 QIcon 클래스로

아이콘 인스턴스를 생성하여 넘겨주면 해당 액션의 아이콘이 등록된다.  그 다음인 text 인자에는 액션에 표시될

텍스트로 Exit를, 그 뒤에는 상위 위젯으로 self, 즉 MyApp 위젯을 넘겨준다.

 

setShortCut 으로 단축키를 지정하고 setStatusTip 으로 커서를 가져다대면 해당 지정된 텍스트가 스테이터스창에

나타나도록 한다. 액션은 실행될 경우 triggered 시그널을 발생시키기 때문에 해당 시그널에 self.close 를 연결하여

액션 실행시 MyApp이 종료되도록 해준다.  마지막으로 addAction 을 호출하여 파일메뉴에 액션을 등록해준다.

 

File 메뉴에 들어가면 지정한 아이콘과 텍스트, 단축키 설명이 들어간 액션이 생성된 것을 확인할 수 있으며

커서를 가져다대면 상태표시줄에 우리가 지정한 액션에 대한 설명이 텍스트로 표시된다.  클릭해서 실행하거나

지정한 단축키대로 Ctrl+Q 를 입력해주면 프로그램이 종료되는 것을 확인할 수 있다.

 

 

4. 툴바(Tool Bar) 만들기

self.addToolBar 를 호출하여 툴바를 생성해준 뒤 메뉴에 추가하기 위해 만들었던 exit_action을 툴바에 추가해준다.

 

툴바에 Exit 액션이 정상적으로 추가된 것을 확인할 수 있다.