PYTHON/QT Designer

QT Designer - 커넥팅 이벤트

  • -

포스팅을 시작하기 전에 앞서, 파이썬(파이참)과 qt designer 프로그램을 통해 제작한 GUI를 연결하는 방법, 그리고 화면 만들기와 버튼 만들기는 다른 포스팅에서 작성했으니 해당 카테고리에서는 해당 내용은 제외하도록 하겠다.

 

Qt Designer의 사용 방법과 연결

Qt Designer 사용 방법 지난 글에서 Anaconda Prompt를 이용하여 Pyqt를 설치했고, 파이썬이 설치된 경로에서 Designer 프로그램의 바로가기 아이콘을 바탕화면에 만들었다. 이제 그 바로가기 파일을 실행

trustyou.tistory.com

 

이번 포스팅에서는 커넥팅(Connecting)에 대해 다루어보고자 한다. 이는 단순하게 특정 동작 이후에 특정 동작이 이루어지도록 연결하는 것으로, 예를 들면 Open API를 사용할 때 특정 값을 입력한 후에 엔터를 친다거나 하는 동작을 수행했을 때 바로 다음 동작이 이루어지도록 하는 등의 처리를 하는 것을 의미한다. 다음과 같은 GUI를 제작했다고 가정해보자.

 

커넥팅 시작하기 - F4

qt designer에서 특정 GUI를 만든 후에, F4 버튼을 누르면 왼쪽에 있는 [위젯 상자]가 흐릿해지고 GUI의 배경에 있던 점선들이 사라지면서 커넥팅이 시작된다. (하단 좌측이 커넥팅 시작 전, 하단 우측이 커넥팅 시작 후의 변화)

 

 

커넥팅하기

F4 버튼을 눌러 커넥팅을 활성화시킨 후에, 특정 객체에 마우스를 올리면 해당 객체가 빨갛게 변하면서 강조된다. 이후 강조된 부분을 드래그하면 하나의 화살표가 생기게 되는데, 그것을 바로 커넥팅(Connecting)이라고 한다. 

이제 이 연결하고자 하는 객체에서 마우스를 떼면 아래와 같은 창이 뜬다.

해당 화면은 두 가지로 분리되어 있는데, 왼쪽은 처음에 드래그하기 시작했던 lineEdit이라는 객체이고 오른쪽은 이후에 화살표가 연결된 '조회'라는 텍스트가 입력되어 있는 pushButton이라는 객체이다. 이 화면은 바로 각 객체에서 어떤 동작이 이루어졌을 때 커넥팅을 시킬지를 선택하는 화면이다. 그렇다면 하나하나 자세히 살펴보도록 하자. 일단 아래에 있는 pushButton같은 경우에는 몇 개가 빠져 있는데, 실제로 qt designer에서 지원하지 않는 기능들이 몇 개가 있기도 하고, 실제로 사용하는 기능은 몇 가지 이벤트 뿐이기 때문이다. 독자 스스로 직접 lineEdit에 있는 메뉴 중 하나를 선택해보면, 오른쪽에 있는 메뉴들이 활성화되는 동시에 몇 가지 기능들이 빠지게 된다.

lineEdit 설명
cursorPositionChanged(int,int) 커서의 위치가 이동했을 경우에 커넥팅 발생
int, int라는 것은 마우스의 좌표를 의미합니다.
editingFinished() 해당 lineEdit에 특정 정보를 입력하는 것이 끝났을 때 커넥팅 발생
returnPressed() 키보드의 엔터키가 입력되었을 때 커넥팅 발생
selectionChanged() 변화가 선택되었을 때 커넥팅 발생
textChanged(QString) 텍스트가 변경되었을 때 커넥팅 발생(string 자료형에 반응)
textEdited(QString) 텍스트가 입력되었을 때 커넥팅 발생(string 자료형에 반응)

 

pushButton 설명
animateClick() 버튼을 즉시 눌렀다가 100ms(밀리 세컨드) 이후에 버튼을 놓는 동작
click(0 커넥팅이 발생되었을 때 해당 pushButton을 클릭하는 동작
showMenu() 커넥팅이 발생했을 때 메뉴를 나타내는 동작
toggle() 토글 버튼이 변경되었을 때 해당 이벤트가 발생함
(이는 pushButton이 아닌 radio Button과 함께 사용함)

 

본인의 경우에는 lineEdit은 returnPressed()를, pushButton은 click()을 선택했다. 이 커넥팅은 흔히 특정 사이트에 로그인할 때, 아이디를 입력한 후 엔터를 치면 비밀번호를 입력하는 칸으로 이동하고, 비밀번호를 입력한 후에 엔터를 치면 로그인 버튼이 눌리는 것과 같다. 그렇다면 이제 이를 코드로 구축해보자.

 


728x90

 

동작하는 거 맞아?

실제로 이 커넥팅이 정확하게 동작하는지를 확인하기 위해 파이썬과 해당 GUI 파일을 연결한 후에, 해당 lineEdit 칸에 특정 값을 입력한 후에 엔터키를 눌러보면 된다. (연결하는 코드는 맨 앞의 게시물을 참조하도록 하자)

또한 파이썬(파이참)에서는 위에서 살펴봤던 returnPressed() 등과 같은 부분들이 이벤트로 발생하기 때문에, class 내에서 해당 코드를 구축해주어야 한다. 본 게시글에서 사진으로 보는 lineEdit과 pushButton의 객체 이름은 lineEdit과 pushButton이다. 따라서 다음과 같은 코드를 구축해주면 된다. 

self.lineEdit.returnPressed.connect(self.pushButton_clicked)

def pushButton_clicked(self):
	print("버튼이 클릭되었습니다.")

즉, lineEdit을 통해 returnPressed라는 이벤트가 발생하게 되면, pushButton_clicked라는 함수로 연결되도록 하고 그 함수 내에서는 '버튼이 클릭되었습니다.' 라는 문구를 출력하도록 한 것이다. 이제 이 코드를 실행해서 lineEdit 칸에 대고 별다른 값을 입력하지 않아도 엔터키만 누르면 '버튼이 클릭되었습니다.'라는 문구가 출력되는 것을 확인해볼 수 있다.

그렇다면 testChanged()를 사용해보도록 하자. 총 asd 세 개의 문구를 입력했는데, a를 입력할 때 한 번, s를 입력할 때 한 번, d를 입력할 때 한 번 총 세 번에 걸쳐 'textChanged..'라는 문구가 출력되는 모습을 확인할 수 있다.

 

이처럼 qt designer 내에서 F4를 통해 커넥팅 할 경우에 발생하는 이벤트의 이름이 무엇인지 확인하고, 그를 바탕으로 파이썬 내에서 해당 이벤트를 처리하는 방법에 대해 알아보았다. 이번 포스팅에서 다루었던 것 외에도 다른 객체에 정말 다양한 이벤트들이 있으니, 파이참 내에서 이를 구현하고 실행해보면서 만들고 싶은 프로그램들을 만들 수 있다. 심지어는 특정 작업이 자동으로 수행되도록 설정한 후에, 해당 작업이 끝났을 때에는 특정 버튼이 눌리도록 하고 그 버튼을 또 다른 함수로 연결해둠으로써 완전한 자동 처리 과정을 구축할 수도 있다.

 

 


728x90
반응형

'PYTHON > QT Designer' 카테고리의 다른 글

하나의 gui를 두 개의 파일에서 동시에 사용하기  (2) 2021.12.10
QT Designer 내 모듈  (0) 2021.06.13
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.