PyQt 예제 3.2.3

이번 글은 지난번 작성 했던 부분의 버그 수정에 관한 것이다. 특별한 내용은 없고 단지 버그가 있어서 글을 올린다.

수정된 내용은,
"이미지 확대 및 축소에서 소수점 절삭 및 오차로 인한 버그 수정"
"이미지 확대 및 축소의 같은 비율 유지 상태 저장 추가"
이다.

코드를 위부터 차례로 살펴보겠다.
#
        self.image = QImage(":kubuntuLogoIcon.png")
        self.imageLabel.setPixmap(QPixmap.fromImage(self.image))
        self.imageZoom = (100, 100)
        self.sameZoomCheckState = False
아래 2줄이 추가되었다. 현재 이미지 비율과 같은 비율 유지 상태 부분이다.

그리고 확대/축소 대화 상자를 여는 부분에서 수정된 곳이다.
#
        zoomDialog = QDialog(self)

        widthSpinBox = QSpinBox()
        widthSpinBox.setRange(0, 500) # 수정
        widthSpinBox.setSuffix(" %")
        heightSpinBox = QSpinBox()
        heightSpinBox.setRange(0, 500) # 수정
        heightSpinBox.setSuffix(" %")
        
        image = self.imageLabel.pixmap().toImage() # 확대 비율 계산 부분 삭제

        widthSpinBox.setValue(self.imageZoom[0])  # 추가
        heightSpinBox.setValue(self.imageZoom[1]) # 추가

        sameZoomCheckBox = QCheckBox("같은 비율 유지") # 추가
        sameZoomCheckBox.setChecked(self.sameZoomCheckState) # 추가

        def ValueSameSet(value):
            if sameZoomCheckBox.isChecked(): # 수정
                widthSpinBox.setValue(value)
                heightSpinBox.setValue(value)
        
        self.connect(widthSpinBox, SIGNAL("valueChanged(int)"),        
                        ValueSameSet)
        self.connect(heightSpinBox, SIGNAL("valueChanged(int)"),
                        ValueSameSet)
        self.connect(sameZoomCheckBox, SIGNAL("stateChanged(int)"), # 수정
                    lambda: ValueSameSet(widthSpinBox.value()))
        
        buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | 
                                        QDialogButtonBox.Cancel)
        self.connect(buttonBox, SIGNAL("accepted()"), zoomDialog,
                        SLOT("accept()"))
        self.connect(buttonBox, SIGNAL("rejected()"), zoomDialog,
                        SLOT("reject()"))

        layout = QFormLayout()
        layout.addRow(QLabel("너비: "), widthSpinBox)
        layout.addRow(QLabel("높이: "), heightSpinBox)
        layout.addWidget(sameZoomCheckBox) # 수정
        layout.addWidget(buttonBox)

        zoomDialog.setLayout(layout)
        zoomDialog.setWindowTitle("이미지 확대/축소")

        if zoomDialog.exec_(): # 아래 내용 수정
            self.imageZoom = (widthSpinBox.value(), heightSpinBox.value())
            width = self.image.width() * self.imageZoom[0] // 100
            height = self.image.height() * self.imageZoom[1] // 100
            image = self.image.scaled(width, height)
            self.imageLabel.setPixmap(QPixmap.fromImage(image))
            self.sameZoomCheckState = sameZoomCheckBox.isChecked() # 추가

위에서 말한 대로, 이전 프로그램에서는 소수점 절삭 오차로 인해서 원래 확대/축소한 비율이 대화상자를 다시 열었을 때 다르게 나오는 버그가 있었다. 따라서 이들에 대한 값을 가지고 있도록 변경하였다.

댓글 1개:

  1. It outlined the penalty for being in breach of these tips, that being a maximum of six months in jail, a nice, or each for every offence. Any individual under 18 won't be allowed to gamble and it is an offence to invite or permit anybody under the age of 18 years to gamble. In December 2016 the 온라인카지노 modification to the Polish Gambling Act was scheduled to come back into pressure on 1 April 2017.

    답글삭제

크리에이티브 커먼즈 라이선스