QListWidget 위젯을 사용해서 구현할 내용은 아래와 같습니다. 중앙에 버튼을 눌러 왼쪽 목록에 있는 항목을 오른쪽으로 옮기고 지우는 것입니다. 반대의 경우도 마찬가지입니다. 바로 아래 버튼을 누르면 오른쪽에서 왼쪽으로 데이터가 이동합니다. QListWidget 의 기본 사용법을 응용해서 만든 것입니다.
▼ QListWidget 의 기초 사용법은 아래 포스팅을 참고하세요.
https://mainia.tistory.com/7196
▼ 다음은 어떻게 구현을 했는지 간략하게 소스를 설명하도록 하겠습니다. 먼저 화면에 QListWidget 2개를 추가합니다. 한쪽은 데이터를 채우고 다른 한쪽은 비웁니다.
from PyQt5.QtWidgets import QListWidget
# 첫 번째 QListWidget 추가
self.listwidget1 = QListWidget(self)
self.listwidget1.setGeometry(10, 10, 150, 100)
# 지정한 행 위치에 값 추가
self.listwidget1.insertItem(0, "Chrome")
self.listwidget1.insertItem(1, "Explorer")
self.listwidget1.insertItem(2, "Firefox")
self.listwidget1.insertItem(4, "Edge")
# 두 번째 QListWidget 추가
self.listwidget2 = QListWidget(self)
self.listwidget2.setGeometry(300, 10, 150, 100)
▼ 화면 구성 요소 중 2번째에 해당하는 좌우 이동 버튼 두개로 추가합니다. 그리고 각 버튼의 clicked 시그널에 함수를 연결합니다. 함수에는 데이터를 옮기는 로직이 들어갑니다.
from PyQt5.QtWidgets import QPushButton
# --- 오른쪽 옮기기
self.left_button = QPushButton(self);
self.left_button.move(180, 20)
self.left_button.setText('-->')
# --- 왼쪽 옮기기
self.right_button = QPushButton(self)
self.right_button.move(180, 60)
self.right_button.setText('<--')
# 데이터 옮기기 버튼 이벤트
self.left_button.clicked.connect(self.clicked_left_button)
self.right_button.clicked.connect(self.clicked_right_button)
▼ 두 개의 QPushButton 과 연결된 함수는 다음과 같습니다. 실제 데이터를 옮기는데 사용하는 함수는 move_current_item() 입니다. clicked 시그널과 연결된 두 함수는 데이터를 옮길 곳의 소스와 타겟을 파라미터로 구분해서 move_current_item() 을 실행합니다. move_current_item() 내부에서는 소스에 해당하는 QListWidget 의 선택되어 있는 행 번호를 currentRow() 로 알아옵니다. 리턴 받은 행 번호를 taskItem() 함수의 파라미터로 넘겨서 현재 선택된 QListWidgetItem 객체를 가져와 타겟에 해당하는 QListWidget 에 addItem() 을 이용해서 추가합니다.
def clicked_left_button(self):
self.move_current_item(self.listwidget1, self.listwidget2)
def clicked_right_button(self):
self.move_current_item(self.listwidget2, self.listwidget1)
def move_current_item(self, src, dst):
if src.currentItem():
row = src.currentRow()
dst.addItem(src.takeItem(row))
▼ 지금까지 설명한 내용을 구현한 전체 소스는 다음과 같습니다.
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QApplication, QListWidget, \
QMainWindow, QPushButton
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 윈도우 설정
self.setGeometry(300, 300, 500, 300) # x, y, w, h
self.setWindowTitle('Two QListWidget Window')
# 첫 번째 QListWidget 추가
self.listwidget1 = QListWidget(self)
self.listwidget1.setGeometry(10, 10, 150, 100)
# 지정한 행 위치에 값 추가
self.listwidget1.insertItem(0, "Chrome")
self.listwidget1.insertItem(1, "Explorer")
self.listwidget1.insertItem(2, "Firefox")
self.listwidget1.insertItem(4, "Edge")
# 두 번째 QListWidget 추가
self.listwidget2 = QListWidget(self)
self.listwidget2.setGeometry(300, 10, 150, 100)
# --- 오른쪽 옮기기
self.left_button = QPushButton(self);
self.left_button.move(180, 20)
self.left_button.setText('-->')
# --- 왼쪽 옮기기
self.right_button = QPushButton(self)
self.right_button.move(180, 60)
self.right_button.setText('<--')
# 데이터 옮기기 버튼 이벤트
self.left_button.clicked.connect(self.clicked_left_button)
self.right_button.clicked.connect(self.clicked_right_button)
def clicked_left_button(self):
self.move_current_item(self.listwidget1, self.listwidget2)
def clicked_right_button(self):
self.move_current_item(self.listwidget2, self.listwidget1)
def move_current_item(self, src, dst):
if src.currentItem():
row = src.currentRow()
dst.addItem(src.takeItem(row))
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
'파이썬 Python' 카테고리의 다른 글
파이썬(Python) OpenCV 파일 읽기와 저장하기 (1) | 2024.08.28 |
---|---|
파이썬 Python Flask no module named xxxx 에러 해결하기 (0) | 2024.08.25 |
파이썬(Python) Flask 이미지 서버에 올리기 (0) | 2024.08.25 |
파이썬(Python) 설치 라이브러리 확인하기 (0) | 2024.08.24 |
파이썬(Python) PyQt5 QListWidget 위젯 사용하기 (0) | 2024.08.22 |
파이썬(Python) str.format 문자열 형식화 하기 (0) | 2024.08.17 |
파이썬(Python) Pyinstaller 로 exe 실행 파일 만드는 방법 (5) | 2024.08.02 |
파이썬(Python) 문자를 숫자로 변환해서 숫자에 더하는 방법 (0) | 2024.07.21 |