수정된 내용은,
"이미지 확대 및 축소에서 소수점 절삭 및 오차로 인한 버그 수정"
"이미지 확대 및 축소의 같은 비율 유지 상태 저장 추가"
이다.
코드를 위부터 차례로 살펴보겠다.
# 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() # 추가
위에서 말한 대로, 이전 프로그램에서는 소수점 절삭 오차로 인해서 원래 확대/축소한 비율이 대화상자를 다시 열었을 때 다르게 나오는 버그가 있었다. 따라서 이들에 대한 값을 가지고 있도록 변경하였다.
댓글 없음:
댓글 쓰기