세로형
Recent Posts
Recent Comments
Link
11-25 00:03
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

파이썬 gui(PyQt5) 탭(tab) 만들기 본문

python

파이썬 gui(PyQt5) 탭(tab) 만들기

이수진의 블로그 2018. 1. 25. 11:20
반응형
728x170

PyQt5를 공부하다가 화면을 여러개 만들어서 할 수 있나? 를 고민했습니다

뭐 물론 가능할 것 같았습니다

layout을 생성해주는 방식으로 말이죠

하지만 그러면 보기에도 불편하고 퍼포먼스도 딱히 좋지 않을 것이라 생각했습니다

굳이 layout을 만들지 않고 1개의 레이아웃에 여러 옵션을 넣을 수 없을까?


그렇게 찾다가 tab을 찾게 되었습니다!


이런식으로 말이죠!


소스는 아래와 같이 되어 있습니다.

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
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSlot
 
 
class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = '파이썬 탭 연습'
        self.left = 100
        self.top = 100
        self.width = 300
        self.height = 200
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
 
        self.table_widget = MyTableWidget(self)
        self.setCentralWidget(self.table_widget)
 
        self.show()
 
 
class MyTableWidget(QWidget):
    def __init__(self, parent):
        super(QWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)
 
        # 탭 스크린 설정
        self.tabs = QTabWidget()
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tabs.resize(300200)
 
        # 탭 추가
        self.tabs.addTab(self.tab1, "Tab 1")
        self.tabs.addTab(self.tab2, "Tab 2")
 
        # 첫번째 탭 레이아웃 설정
        self.tab1.layout = QVBoxLayout(self)
        self.pushButton1 = QPushButton("PyQt5 button")
        self.tab1.layout.addWidget(self.pushButton1)
        self.tab1.setLayout(self.tab1.layout)
 
        # 그리고 위젯에 탭 추가
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)
 
    @pyqtSlot()
    def on_click(self):
        print("\n")
        for currentQTableWidgetItem in self.tableWidget.selectedItems():
            print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
cs



App이라는 클래스는 QMainWindow를 상속합니다

그래서 App 클래스의 객체를 생성해주며 시작하게 되죠

App은 init을 통해 기본 셋팅을 해줍니다.

크기, 위치 등등을 말이죠

그리고 show를 통해 보여주고요

근데 보여주는 방식이 MyTableWidget 클래스를 사용해서 보여줍니다

MytableWidget은 Qwidget을 상속합니다

Qwidget은 UI와 오브젝트의 가장 상위 클래스입니다.

Qwidget밑에 버튼, 텍스트박스(QLineEdit), 콤보박스(QComboBox), 다이얼로그(QDialog) 등이 존재합니다


Mytable에서 init은 layout을 만들어주는데요

tabs = QTabWidtet()을 통해 탭에 대한 객체를 생성합니다.

그리고 각 탭은 QWidget을 통해 생성하고요

그리고 addTab을 통해 각 탭을 넣어줍니다!


이후 텝에 대해서 각 레이아웃을 셋팅해주고 add해줍니다

이렇게 하셔서 탭을 추가하시면 됩니다!

반응형
그리드형
Comments