메인윈도.

행동하는 개발자·2022년 9월 6일
0

PySide, PyQt

목록 보기
3/20

메인윈도

최상위창으로 생성되는 메뉴, 툴바, 상태바 등을 갖는 위젯을 의미한다.

상하좌우에 메뉴(QMenuBar), 툴바(QToolBar), 상태바(QStatusBar) 등을 배치할 수 있다. 또한 도킹윈도(QDockWidget, 서브클래싱) 영역도 정해져 있다. 중앙 위젯은 QWidget에서 상속받은 위젯이면 된다(QMainWindow.setCentralWidget()).

내장QT위젯: QTextEdit
컨테이너위젯: QMdiArea(고전적인 MDI 인터페이스), QTabWidget(탭문서 형태의 인터페이스)

액션

메뉴, 툴바, 상태바 등을 편리하게 생성하고 관리할 수 있는 개념. QAction에 메뉴에 표시되는 문자열, 아이콘, 단축키, 툴팁, 상태바에 나타나는 팁 문자열, 와츠디스 문자열 등을 지정할 수 있다.

메인윈도에서 액션으로 메뉴와 툴바를 구성하는 방법
1. 액션을 만들고 설정한다(아이콘, 단축키, 팁, slot 함수 연결 등)
2. 메뉴를 생성하고, 만들어둔 액션을 추가한다(QMenu.addAction())
3. 툴바를 생성하고, 만들어둔 액션을 추가한다(QToolBar.addAction())

class MainWindow(QMainWindow):
    def __init__(self,parent=None):
        QMainWindow.__init__(self,parent)
        self.setWindowTitle('Shape')
        self.setWindowIcon(QIcon(":/images/qt.png"))

        self.myWidget = MyWidget()
        self.setCentralWidget(self.myWidget)

        # 액션을 생성한다.
        self.newAction = QAction("&New", self)
        self.newAction.setIcon(QIcon(":/images/new.png")
        self.newAction.setShortcut("Ctrl+N")  # or newAction.setShortcut(QKeySequence::New)
        self.newAction.setStatusTip("Create a new file")
        self.newAction.triggered.connect(newFile)

        ...
        self.copyAction = QAction("&Copy", self)
        ...
        self.copyAction.triggered.connect(myWidget.copy)   # MyWidget::copy() 슬롯과 연결

        # 메뉴를 만든다
        fileMenu = self.menuBar().addMenu("&File")
        fileMenu.addAction(self.newAction)
        ...
        sperator = fileMenu.addSeparator()
        fileMenu.addAction(self.exitAction)

        # 툴바를 만든다
        fileToolBar = self.addToolBar("&File")
        fileToolBar.addAction(self.copyAction)
        ...

        # 상태바를 만든다
        ....

setShortcut에서 단축키를 지정할 수 있다.

QAction.setStatusTip(text)로 상태바에 text가 표시되게 할 수 있다.

체크 액션

QAction.setCheckable(true)으로 체크가능한 액션을 만들 수 있다.

checkAction = QAction(self)
... set icon, shortcut, status tips
checkAction.setCheckable(True)
checAction.setChecked(True)
checkAction.toggled.connect(self.someSlot)  # someSlot(bool)

on/off 상태에 따라 다른 아이콘

icon= QIcon(self)
icon.addFile(":/images/normal.png", QSize(), QIcon.Normal, QIcon.Off)
icon.addFile(":/images/pressed.png", QSize(), QIcon.Normal, QIcon.On)
someAction.setIcon(icon)

액션에는 활성화 상태와 체크 상태라는 두가지 상태가 존재할 수 있다. setEnabled(bool)로 설정할 수 있다.

액션 그룹

몇 개의 체크액션을 묶어 그 중 하나만 선택 가능하도록 할 경우가 있다.

redAction = QAction("&Red",self)
... set icon, shortcut, tool tips, status tips
redAction.setCheckable(True)
redAction.setChecked(True)  # initial check

greenAction = QAction("&Green",self)
... set icon, shortcut, tool tips, status tips
greenAction.setCheckable(True);

blueAction = QAction("&Blue",self)
... set icon, shortcut, tool tips, status tips
blueAction.setCheckable(True)

colorActionGroup = QActionGroup(self)
colorActionGroup.addAction(redAction)
colorActionGroup.addAction(greenAction)
colorActionGroup.addAction(blueAction)
redAction.setChecked(True)          # actionGroup 중 하나의 액션을 체크상태로 초기화
colorActionGroup.triggered.connect(self.setColor)
# triggered(QAction*) - self.setColor(QAction*)
profile
끊임없이 뭔가를 남기는 사람

0개의 댓글