import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QVBoxLayout, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QLabel("Hello")
font = widget.font()
font.setPointSize(30)
widget.setFont(font)
widget.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
self.setCentralWidget(widget)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
QLabel은 수정할 수 없고 글자로 구성된 위젯이다. 위의 코드를 수행하게 되면 Hello라는 글자를 볼 수 있다. 앞서서 설명한 코드와 거의 대동소이 하기때문에 이 부분에서는 Qt namespace를 이용하는 부분만 간략하게 정리해보고자 한다.
widget.setAlignment 설정라인을 보게되면 AlignHenter와 AlignVCenter를 OR 연산하는 것을 알 수 있다. 즉, 정렬의 방법에는 크게 수평, 수직정렬이 있음을 할 수 있다. 수평정렬에는 Left, Right, Center, 그리고 Justify가 존재한다.
Flag | 정렬방식 |
Qt.AlignLeft | 왼쪽 정렬 |
Qt.AlignRight | 오른쪽 정렬 |
Qt.AlignHCenter | 중앙 정렬 |
Qt.AlignJustify 1) | - |
책에서는 빨간색으로 highlighting된 Flag 역시 설명하고 있지만 PyQt5에서는 동작하지 않는다.
또한, 수직정렬 옵션에는 아래와 같이 세 가지 있다.
Flag | 정렬방식 |
Qt.AlignTop | 위쪽 정렬 |
Qt.AlignBottom | 아래쪽 정렬 |
Qt.AlignVCenter | 중앙 정렬 |
코드에서 보여진 것 처럼 각각의 Flag는 OR연산으로 조합이 가능하다. 조금더 자세하게 보면 살펴보면 flag는 non-overlapping bitmasks이다. 예를 들면, Qt.AlignLeft는 0b0001, Qt.AlignBotton은 0b0100의 값을 갖는다. 그래서 이 둘을 OR연산하면 0b0101이고 Bottom left 정렬로 해석할 수 있는 것이다. 물론, Qt.AlignCenter라는 하나의 flag로 수평, 수직을 동시에 정렬할 수 있다는 사실!
책에서도 weirdly라는 단어를 사용해서 표현했지만 image도 QLabel을 통해서 출력할 수 있다. 코드는 아래와 같으며 기본 옵션에 의해서 창의 크기를 변경하게 되면 이미지는 함께 확대/축소가 되지 않는다. 이 옵션을 변경하기 위해서는 아래와 같이 선언해주면 된다.
import sys
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QLabel()
widget.setPixmap(QPixmap("test.jpg"))
# 해당 라인이 없으면 이미지는 고정크기로 출력됨
widget.setScaledContents(True)
self.setCentralWidget(widget)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
1. Reference site: www.geeksforgeeks.org/qt-alignment-in-pyqt5/ (PyQt5에서 Flag 동작하지 않는 내용)
2. Reference book: "Create GUI Applications with Python & Qt5: The hands-on guide to making apps with Python"
'<개인공부> - IT > [Python]' 카테고리의 다른 글
Day 5. PyQt5 (QListWidget, QLineEdit) (0) | 2021.03.10 |
---|---|
Day 4. PyQt5 (QCheckBox, QComboBox) (0) | 2021.03.05 |
Day 2. PyQt5 (Signal and Slot) (0) | 2021.02.09 |
Day 1. PyQt5 사용해보기 - 빈 윈도우 띄우기 그리고 이벤트 루프 (0) | 2021.02.04 |
복수개의 값 리스트에서 지우기 (None, multiple data remove in list) (0) | 2020.09.11 |