ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Day 3. PyQt5 (QLabel)
    <개인공부> - IT/[Python] 2021. 2. 9. 05:23
    반응형
    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"

    반응형
Designed by Tistory.