반응형
이번 글에서는 프로그램의 각 영역을 분할하여 각 각에 다른 위젯을 할당함으로써,
기존에 설계했던 방식인 pe 구조 | hex view | 설명 창 구조로 만들기 위한 기반 작업을 수행하도록 하겠습니다.
해당 작업을 하기 위해, pyqt4 의 QSplitter 라는 클래스를 이용하여 프로그램 창의 각 부분을 나누도록 하였습니다.
MainWindow와 독립적으로 구현하기 위해서, subWindow라는 하위 클래스를 만들어 이 클래스를 QSplitter로 3등분 분할한 뒤, MainWindow의 CentralWidget으로 등록함으로써 구현했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | from PyQt4.QtGui import * from PyQt4.QtCore import* import sys class MyWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) ### 윈도우 특성 설정 ### self.setWindowTitle('PEDU') self.setGeometry(400,200,1500,600) #self.setWindowIcon(QIcon('')) self.statusBar().showMessage('ready') self.creat_menubar_child() self.creat_menubar() subWin = subWindow() self.setCentralWidget(subWin) self.show() def creat_menubar_child(self): ### 메뉴바 설정 ### #load file self.fileAction1 = QAction("load file",self) self.fileAction1.setShortcut("Ctrl+O") self.fileAction1.setStatusTip("Load the file in local place")# 밑에서 상태를 알려줌 self.fileAction1.triggered.connect(self.open_file) #exit self.fileAction2 = QAction("Exit",self) self.fileAction2.setShortcut("Ctrl+C") self.fileAction2.setStatusTip("Exit the App") self.fileAction2.triggered.connect(self.close_window) #change font self.fileAction3 = QAction("Change Font",self) self.fileAction3.setShortcut("Ctrl+T") self.fileAction3.setStatusTip("Change the string font in application") self.fileAction3.triggered.connect(self.change_font) def creat_menubar(self): ### MenuBar ### mainMenu = self.menuBar() #File fileMenu1 = mainMenu.addMenu('File') fileMenu1.addAction(self.fileAction1) fileMenu1.addAction(self.fileAction2) #Option fileMenu2 = mainMenu.addMenu('Options') fileMenu2.addAction(self.fileAction3) #Tool fileMenu3 = mainMenu.addMenu('Tools') ### toolbar 설정 ### #open_file # openIcon = QIcon() # openIcon.addFile('openFileImage2.png', QSize(16,16)) # openAction = QAction(toolIcon, 'open_file', self) openAction = QAction(QIcon('file_open.png'), 'Open', self) openAction.triggered.connect(self.open_file) #exit_file exitAction = QAction(QIcon('exit.png'), 'Exit', self) exitAction.triggered.connect(self.close_window) #change_font setFontAction = QAction(QIcon('option.png'), 'Setting', self) setFontAction.triggered.connect(self.change_font) #open_file2 self.openToolBar = self.addToolBar("Open") self.openToolBar.addAction(openAction) #exit_file2 self.exitToolBar = self.addToolBar("Exit") self.exitToolBar.addAction(exitAction) #change_font2 self.setToolBar = self.addToolBar("Setting") self.setToolBar.addAction(setFontAction) def open_file(self): global filename filename = QFileDialog.getOpenFileName(self, "Select file") global Pfile Pfile = pefile.PE(filename) def close_window(self): result = QMessageBox.question(self, 'Message',"Are you sure you leave?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if result == QMessageBox.Yes: sys.exit() else: pass def change_font(self): font, valid = QFontDialog.getFont() if valid: self.styleChoice.setFont(font) class subWindow(QWidget): def __init__(self): QWidget.__init__(self) self.creat_split_window() self.show() def creat_split_window(self): hbox = QHBoxLayout() splitter1 = QSplitter(Qt.Horizontal) firstSection = QTextEdit() secondSection = QTextEdit() thirdSection = QTextEdit() splitter1.addWidget(firstSection) splitter1.addWidget(secondSection) #splitter1.addWidget(hexview) splitter1.setSizes([300,800]) splitter2 = QSplitter(Qt.Horizontal) splitter2.addWidget(splitter1) splitter2.addWidget(thirdSection) splitter2.setSizes([1500,500]) hbox.addWidget(splitter2) #QApplication.setStyle(QStyleFactory.create('Cleanlooks')) self.setLayout(hbox) if __name__ == '__main__': app = QApplication(sys.argv) ex = MyWindow() sys.exit(app.exec_()) | cs |
완성된 프로그램은 다음과 같습니다.
보시다시피 splitter로 구현함으로써, 각 각의 영역의 크기를 자유자재로 조절할 수 있도록 하였습니다. 다음 포스팅에서는 저 splitter로 나눈 영역들을 하나 하나씩 채워나가며, 최종적으로는 각 영역들이 서로 통신할 수 있도록 하는 작업을 수행하도록 하겠습니다.
반응형
'Side Project# > PEDU' 카테고리의 다른 글
Develop PEDU with pyqt4 - 3 (0) | 2018.06.27 |
---|---|
Develop PEDU with pyqt4 - 2 (0) | 2018.06.27 |
Develop PEDU with pyqt4 - 1 (0) | 2018.06.27 |
Develop PEDU with pyqt4 (0) | 2018.06.26 |