ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Day 8. PyQt5 (Actions, Toolbars, Menus)
    <개인공부> - IT/[Python] 2021. 3. 20. 01:04
    반응형

    Toolbar

    툴바는 일반적으로 User Interface에서 볼 수 있는 요소이다. 툴바는 계층적으로 원하는 메뉴를 찾아서 접근하는 방식 대신에 아이콘 클릭 한 번으로 빠르게 접근가능하도록 만든다.

     

    import sys
    
    from PyQt5.QtCore import Qt
    from PyQt5.QtWidgets import (
        QApplication, 
        QMainWindow,
        QToolBar,
        QLabel,
        QAction
    )
    
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("My App")
    
            label = QLabel("hello")
            label.setAlignment(Qt.AlignCenter)
    
            self.setCentralWidget(label)
    
            toolbar = QToolBar("My main toolbar")
            self.addToolBar(toolbar)
    
            button_action = QAction("Your button", self)
            button_action.setStatusTip("This is your button")
            button_action.triggered.connect(self.onMyToolBarButtonClick)
            toolbar.addAction(button_action)
            
        def onMyToolBarButtonClick(self, s):
            print("click", s)
            
    app = QApplication(sys.argv)
    
    window = MainWindow()
    window.show()
    
    app.exec_()

     

    툴바를 생성하는 코드와 함께 QAction에 대해서 간단히 정리해고자 한다. 책에서 정의한 QAction은 abstract UI를 설명하기 위한 방법을 제공하는 Class라고 설명하고 있다. 한 번에 와닿지 않는 설명이지만 부가 설명을 보면 다음과 같다. multiple interface elements를 하나의 object로 정의해 통합하는 것. 예를 들면, 툴바와 메뉴에 동일한 기능이 존재하는 경우는 빈번한다. 잘라내기를 접근하려면 Menu에서도 툴바를 통해서도 접근이 가능한데 QAction을 이용하지 않으면 사용에 툴바 그리고 메뉴에서 각각 Action을 정의해야 한다. 하지만 QAction을 정의 후 필요한 액션을 widget에서 붙여만 준다면 불필요한 코딩을 줄일 수 있게된다. 

    Menu

    메뉴 역시 기본 UI의 구성요소로 분류된다. 대개 프로그램의 상단에 위치하며 계층적인 트리 구조로 구성된다. 아래 코드에서는 단축키 설정등 기본적인 내용을 확인해 볼 수 있다.

     

    import sys
    
    from PyQt5.QtCore import Qt, QSize
    from PyQt5.QtGui import QIcon, QKeySequence
    from PyQt5.QtWidgets import (
        QApplication, 
        QMainWindow,
        QToolBar,
        QLabel,
        QAction,
        QStatusBar,
        QCheckBox
    )
    
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("My App")
    
            label = QLabel("hello")
            label.setAlignment(Qt.AlignCenter)
    
            self.setCentralWidget(label)
    
            toolbar = QToolBar("My main toolbar")
            toolbar.setIconSize(QSize(16, 16))
            self.addToolBar(toolbar)
    
            button_action = QAction(QIcon("bug.png"), "&Your button", self)
            button_action.setStatusTip("This is your button")
            button_action.triggered.connect(self.onMyToolBarButtonClick)
            button_action.setCheckable(True)
            button_action.setShortcut(QKeySequence("Ctrl+p"))
            toolbar.addAction(button_action)
    
            toolbar.addSeparator()
    
            button_action2 = QAction(QIcon("bug.png"), "Your &button2", self)
            button_action2.setStatusTip("This is your button2")
            button_action2.triggered.connect(self.onMyToolBarButtonClick)
            button_action2.setCheckable(True)
            toolbar.addAction(button_action)
    
            toolbar.addWidget(QLabel("Hello"))
            toolbar.addWidget(QCheckBox())
            
            self.setStatusBar(QStatusBar(self))
    
            menu = self.menuBar()
            file_menu = menu.addMenu("&File")
            file_menu.addAction(button_action)
            file_menu.addSeparator()
            file_submenu = file_menu.addMenu("Submenu")
            file_submenu.addAction(button_action2)
    
        def onMyToolBarButtonClick(self, s):
            print("click", s)
            
    app = QApplication(sys.argv)
    
    window = MainWindow()
    window.show()
    
    app.exec_()

     

    1. Reference book: "Create GUI Applications with Python & Qt5: The hands-on guide to making apps with Python"

    반응형

    '<개인공부> - IT > [Python]' 카테고리의 다른 글

    Subprocess 모듈이용하기  (0) 2021.04.15
    Day 9. PyQt5 (Dialogs)  (0) 2021.03.30
    Day 7. PyQt5 (Layouts)  (0) 2021.03.19
    Day 6. PyQt5 (QSpinBox, QSlider, QDial)  (0) 2021.03.18
    Day 5. PyQt5 (QListWidget, QLineEdit)  (0) 2021.03.10
Designed by Tistory.