Qt/PyQt5 강좌

QLabel에서 정수 출력시 자리수 유지하는 PyQt5 예제 코드

webnautes 2024. 9. 29. 22:08
반응형

정수를 문자열로 변환하여 QLabel에 출력하면 자리수가 유지되지 않고 출력되는 현상이 있습니다. 이 문제를 해결한 코드입니다.



2024. 9. 29 최초작성



실행시켜 슬라이더를 움직여 보면 자리수 유지의 경우 정수의 자리수가 변해도 항상 같은 위치에 출력되는 반면 자리수 미유지의 경우엔 자리수가 증가함에 따라 출력되는 위치가 변합니다. 

 



전체 코드입니다.

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QSlider, QLabel
from PyQt5.QtCore import Qt

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

    def initUI(self):
        layout = QVBoxLayout()

        # 슬라이더 생성
        self.slider = QSlider(Qt.Horizontal)
        self.slider.setMinimum(1)
        self.slider.setMaximum(1000)
        self.slider.setValue(500# 초기값 설정
        self.slider.setTickPosition(QSlider.TicksBelow)
        self.slider.setTickInterval(100)

        # 자리수가 유지되는 레이블 생성
        self.label_aligned = QLabel()
        self.label_aligned.setAlignment(Qt.AlignCenter)

        # 자리수가 유지되지 않는 레이블 생성
        self.label_not_aligned = QLabel()
        self.label_not_aligned.setAlignment(Qt.AlignCenter)

        # 슬라이더 값 변경 시 레이블 업데이트
        self.slider.valueChanged.connect(self.updateLabels)

        layout.addWidget(self.slider)
        layout.addWidget(self.label_aligned)
        layout.addWidget(self.label_not_aligned)

        self.setLayout(layout)
        self.setWindowTitle('Slider Label Comparison Example')
        self.setGeometry(300, 300, 300, 200)

        # 초기 레이블 업데이트
        self.updateLabels(self.slider.value())

    def updateLabels(self, value):
        # 자리수가 유지되는 레이블 업데이트 (고정폭 폰트 사용)
        self.label_aligned.setText(f"<pre>자리수 유지: {value:4d}</pre>")
       
        # 자리수가 유지되지 않는 레이블 업데이트
        self.label_not_aligned.setText(f"자리수 미유지: {value}")

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


반응형