원문 : http://zetcode.com/gui/pysidetutorial/firstprograms/
간단한 예제
아래는 작은 윈도우를 띄우는 아주 간단한 예제입니다. (윈도우로 많은 것을 할 수는 있지만요.)
사실 윈도우를 띄우는 것도 아주 많은 코드가 필요하지만, 대부분의 프로그램이 같은 코드를 반복하기 때문에
우리는 누군가 이미 만든 것을 사용하는 것이죠. 따라서 우리가 그런 부분을 따로 작성할 필요는 없습니다.
필요한 모듈을 임포트합니다. GUI 위젯은 QtGui 모듈에 있습니다.
모든 PySide 애플리케이션은 QtGui 모듈에 있는 애플리케이션 오브젝트를 만들어야 합니다.
그리고 파이썬 스크립트가 명령프롬프트에서 작동할 수 있으므로 sys.argv 파라미터에서 커맨드라인에서 얻은 인자값을 담고 있습니다.
QWidget 위젯은 PySide에서 모든 UI의 기반이 되는 클래스인데,
이 코드에서는 QWidget의 생성자를 호출합니다.(QWidget은 부모 클래스가 없는데, 부모 클래스가 없는 위젯을 윈도우라고 하죠.)
resize()함수는 위젯의 크기를 바꿔줍니다. (단위는 픽셀)
말 그대로 윈도우의 타이틀바에 표시되는 타이틀을 수정합니다.
show() 함수는 위젯을 화면에 띄워줍니다.
마지막으로, 위의 코드로 어플리케이션의 메인 루프로 들어가게 됩니다.
이 때 부터 (메인 루프에서) 우리가 프로그램을 종료하거나 메인 위젯이 사라질 때 까지 이벤트를 관리할 수 있게 됩니다.
혹시 왜 app.exec_에 언더바가 있는지 궁금하실 수도 있는데, 그건 exec는 파이썬의 키워드이기 때문입니다.
(명명 규칙에 어긋남)
<샘플 코드를 실행한 모습 >
애플리케이션 아이콘
애플리케이션 아이콘은 타이틀바 왼쪽의 작은 사진입니다.(네모난거)
아래 예제에서 PySide에선 아이콘을 어떻게 표시하나 확인해보죠.
위의 예제가 객체지향 스타일로 작성한 것입니다.
<아이콘을 적용한 모습 >
버튼 위젯을 만들고 툴팁을 설정하는 코드입니다.
버튼의 크기를 변경하고, 윈도우에서 이동시켰습니다.
sizeHint()는 버튼의 기본 크기를 반환합니다.
<버튼과 툴팁을 적용한 모습>
윈도우 닫기
윈도우 창은 X버튼을 눌러서 닫을 수 있지만, 다음 예제에서는 프로그램 상에서 윈도우가 닫히도록 하겠습니다.
여기서 우리는 간단하게 시그널과 슬롯을 다룰겁니다.
아래의 코드는 우리가 예제에서 사용할 QtGui.QPushButton 의 생성자입니다.
text 파라미터는 버튼 위에 표시될 텍스트이고, parent는 버튼을 올려놓을 위젯입니다.
(여기선 QtGui.QWidget이 되겠죠?)
위의 예제에서는 종료 버튼을 만들었습니다. 이 버튼을 누르면 어플리케이션이 종료됩니다.
QtGui.QPushButton 클래스의 인스턴스로 버튼을 만들었습니다.
'Quit'은 버튼의 라벨이고, self는 QtGui.QWidget를 상속받은 Examle 위젯입니다.
PySide에서 이벤트 처리 시스템은 시그널 2과 슬롯 3 매커니즘으로 작동하는데, 4
우리가 버튼을 누를 때 'clicked' 시그널이 발생합니다.
슬롯은 Qt 슬롯이나 파이선 함수가 될 수 있습니다. 5
또한 QtCore.QCoreApplication은 메인루프에서 모든 이벤트를 처리하고, instance() 메서드는 현재 인스턴스를 반환합니다.
참고로 QtCore.QCoreApplication은 QtGui.QApplication과 함께 생성됩니다.
우리는 clicked 시그널을 quit() 메서드와 연결했으므로 clicked 시그널이 발생하면
quit() 메서드와 연결되어 애플리케이션을 종료합니다.
여기에서의 의사소통은 두 객체간의 의사소통에 의해 이루어집니다. 버튼이 이벤트를 발생시키고,
애플리케이션 객체가 이를 받는 것이죠.
이제 직사각형의 폭과 높이가 존재합니다. 이제 직사각형의 중앙을 스크린의 중앙으로 설정합니다.
(직사각형의 크기는 변하지 않습니다.)
애플리케이션 윈도우의 좌측 상단을 qr 직사각형의 좌측 상단으로 이동합니다.
여기까지 튜토리얼이 끝났습니다. 이번 시간에는 PySide에서의 몇 가지 기본적인 것들을 알아봤습니다.
'unmanaged > PySide' 카테고리의 다른 글
[PySide 튜토리얼] 01. PySide 툴킷 소개 (0) | 2017.02.19 |
---|---|
[PySide 튜토리얼] 00. 목차 (0) | 2017.02.18 |
PySide 튜토리얼 번역 시작 및 저작권에 관하여 (0) | 2017.02.18 |
댓글