프로그래밍/PyQt5

[PyQt5] 테이블에 값 넣어보기 - QTableWidget

Dibrary 2021. 8. 4. 10:00
반응형

안녕하세요, Dibrary입니다.

데이터가 여러 개일 경우에는 표로 보면 한 눈에 들어오는 경우가 많죠. 엑셀이 대표적이죠.

GUI도 데이터를 표로 나타낼 수 있습니다. 

단순히 값을 넣는 것 뿐 아니라, 특정 위치 셀의 값을 가져와서 코드로 처리를 한 후에 다시 띄우는 것들도 가능하죠.

 

이렇게 보기 편한 테이블을 사용해 보겠습니다.

여느때와 마찬가지로 Qt Designer를 열어놓은 상태 입니다.

간단히 버튼으로 값을 띄워볼 생각이므로, 버튼 하나와 Table Widget 하나를 올려놓았습니다.

네 완전 심플한 화면이죠?

 

이제 소스코드를 편집 해 보겠습니다.

어느정도 제가 올린 글을 보신 분들은 아시겠지만, 소스코드의 '기본 골격'은 똑같습니다.

위 코드 역시 단순히 Qt Designer로 만든 ui파일 불러오는 것 외에 아무런 구현이 안 된 상태 입니다.

실행 해보시면 아래와 같이 Qt Designer에서 배치시켰던 대로 그대로 실행은 됩니다.

이제 저는 '기능'을 추가 해 볼 겁니다.

 

# 버튼을 눌러서 값 띄우기

우선 가장 간단하게, 버튼을 누르면 표에 값이 나오게 하는 겁니다.

기능 구현에 앞서 구상을 먼저 해 보면

  1. 버튼이 눌렸는지를 알아챈다
  2. 화면에 나와야 하는 값을 띄운다

이게 끝이죠? 1번은 메서드를 만들어서 연결 하면 되고, 2번은 그 메서드 안에 값을 넣어놓으면 그 값이 뜨겠죠?

좀 더 생각을 확장 한다면, 2번에서 값을 DB와 연동한다면 좀 더 다양한 값을 가져오게 할 수 있을 겁니다.

저는 아주 간단하게, 1부터 4까지의 값을 띄워보겠습니다.

먼저 Qt Designer에서 table Widget을 더블클릭 해보세요

이런 화면이 나올겁니다.

원하는 만큼 행과 열의 갯수를 지정 해 주세요, 

저는 2 * 2 개의 행과 열을 설정 해 보았는데, 정말 4칸이 생겼죠?

이제 이 칸에 소스코드로 값을 넣어 볼 겁니다.

데이터로 1,2,3,4 라는 값이 있고,

그냥 버튼 누르면 실행되는 메서드 showValue 안에 tableWidget에 값을 설정하는 코드가 있습니다.

0,0 위치에는 data 안에 있는 0번째 값을
0,1 위치에는 data 안에 있는 1번째 값을
1,0 위치에는 data 안에 있는 2번째 값을
1,1 위치에는 data 안에 있는 3번째 값을 설정 했습니다. 

값이 표에 나오는지 볼까요?

오 정상적으로 나왔네요.

위에서 나온 것을 토대로 확인 해 보면, 숫자로 위치 지정 할 때 앞의 숫자는 row 위치, 뒤의 숫자는 column 위치인 것을 알 수 있습니다.

근데 GUI화면에서 숫자를 더블클릭해서 수정 하시면 막 수정이 됩니다.

수정을 원하지 않는다면, 아래처럼 한 줄의 코드를 추가 해 주시면 됩니다.

아무리 클릭 해도 값을 바꿀 수 없는 table이 완성 되었습니다.

 

# 버튼을 눌러서 자동으로 계산 시키기

이번에는 약간 응용을 해 볼 겁니다.

  • 버튼을 눌러서 띄운 값이 있으면 해당 값의 *2를 띄우고,
  • 버튼을 눌렀을 때 값이 없으면 위에서 처럼 초기 값을 띄우는 것

 

시작은 위에서 작성한 코드를 그대로 사용하시면 됩니다.

우와 뭔가 빼곡해진 느낌이 들죠? 하지만 거기서 거기입니다.

말 그대로, 조건문 하나가 추가 되었고, else부분 코드가 4줄 추가 된 것입니다.

코드를 보죠

1. if self.tableWidget.item(0,0) == None:

만일 0,0 위치에 값이 없다면? 에 해당되는 내용입니다.

내용이 없다는 것은 말 그대로 테이블 위에 나타난 값이 아예 없다는 것이므로 초기 설정 값을 띄워줘야겠죠?

2. self.tableWidget.setItem(0,0,QTableWidgetItem(str(int(self.tableWidget.item(0,0).text( ))*2)))

이 코드는 좀 깁니다. 먼저 setItem을 이용해서 0,0 위치에 값을 설정하는 코드인 것을 알 수 있습니다.

QTableWidgetItem의 내용이 실제 값이 되는데요, 해당 코드의 괄호 가장 안쪽부터 살펴보죠.

기존 tableWidget의 0,0번째 값을 가져와서 int로 바꿔준 후에 *2를 합니다. int로 바꿔주는 이유는 가져온 값은 str 자료형이라서 그렇습니다.

그렇게 바꾼 *2 결과값을 다시 str로 바꿔서 QTableWidgetItem으로 보냅니다.

테이블에 값을 띄울 때는 str 꼴로 바꿔줘야 합니다.

결과는 아래와 같습니다. 버튼을 누를 때 마다 *2씩 늘어나는 것을 볼 수 있습니다.

 

이상으로 표를 다뤄보았는데요, 저는 간단히 2 * 2 개의 데이터에 대해서만 다뤄보았지만

엑셀처럼 굉장히 많은 데이터를 표에 띄우고 관리 할 수 있습니다.

또한, 지금은 데이터가 적어서 각각의 위치 row, column을 직접 1, 0 이렇게 숫자로 넣어주었지만,

숫자가 너무 많다면 for문을 이용해서 처리하면 한결 보기가 깔끔해 집니다.

 

728x90
반응형