Qt/PyQt5 강좌

PyQt5로 구현한 버튼으로 스크롤 가능한 리스트뷰(QListWidget) 예제

webnautes 2024. 9. 29. 05:32
반응형

PyQt5로 구현한 버튼으로 스크롤 가능한 리스트뷰(QListWidget) 예제입니다.

 

2024. 9. 29 최초작성

 

버튼을 눌러 위아래 스크롤이 가능합니다.

 



사용한 전체 코드입니다.

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QListWidget, QPushButton

class ListViewApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 메인 레이아웃
        mainLayout = QVBoxLayout()

        # 리스트 위젯 생성
        self.listWidget = QListWidget()

        # 30개의 아이템 추가
        for i in range(30):
            self.listWidget.addItem(f"Item {i+1}")

        # 버튼 레이아웃
        buttonLayout = QHBoxLayout()

        # 위로 스크롤 버튼
        upButton = QPushButton("Up")
        upButton.clicked.connect(self.scrollUp)

        # 아래로 스크롤 버튼
        downButton = QPushButton("Down")
        downButton.clicked.connect(self.scrollDown)

        # 버튼을 레이아웃에 추가
        buttonLayout.addWidget(upButton)
        buttonLayout.addWidget(downButton)

        # 메인 레이아웃에 위젯들 추가
        mainLayout.addWidget(self.listWidget)
        mainLayout.addLayout(buttonLayout)

        # 레이아웃 설정
        self.setLayout(mainLayout)

        # 윈도우 설정
        self.setGeometry(300, 300, 300, 400)
        self.setWindowTitle('ListView with Scroll Buttons')
       
        # 첫 번째 아이템 선택
        self.listWidget.setCurrentRow(0)

    def scrollUp(self):
        """
        위로 스크롤 버튼 클릭 시 호출되는 메서드
        현재 선택된 아이템의 바로 위 아이템을 선택함
        """
        currentRow = self.listWidget.currentRow()

        # 현재 선택된 행이 첫 번째 행이 아닐 경우에만 위로 이동
        if currentRow > 0:
            self.listWidget.setCurrentRow(currentRow - 1)

    def scrollDown(self):
        """
        아래로 스크롤 버튼 클릭 시 호출되는 메서드
        현재 선택된 아이템의 바로 아래 아이템을 선택함
        """
        currentRow = self.listWidget.currentRow()

        # 현재 선택된 행이 마지막 행이 아닐 경우에만 아래로 이동
        if currentRow < self.listWidget.count() - 1:
            self.listWidget.setCurrentRow(currentRow + 1)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ListViewApp()
    ex.show()
    sys.exit(app.exec_())

    


반응형