프로그램의 메인화면이 될 Central Widget은 작성할 문서의 종류를 탭(tab) 형식으로 보여주도록 할 것이다.
문서의 종류는 일일 정산서 계산서(DayCal), 대차대조표(BalancedSheet), 수협 입금(SH) 의 세 종류이다.
1. CentralWidget
from PySide6.QtCore import QDateTime, QTimer
from PySide6.QtGui import QIcon, QAction
from PySide6.QtWidgets import QMainWindow, QWidget, QLabel, QGridLayout
from controller.config_manager import set_geometry, get_geometry
from widgets.docs_window import DocTab
class MainWindow(QMainWindow):
# 생성자
def __init__(self):
super().__init__()
self.init_ui()
# ui 초기화
def init_ui(self):
``` 생략 ```
# 중앙 위젯
central_widget = QWidget()
central_widget.setStyleSheet("background-color: #FFFFFF")
# 그리드 레이아웃
grid = QGridLayout()
# 탭 위젯 추가
grid.addWidget(DocTab(), 0, 0)
# 중앙 위젯에 그리드 레이아웃 적용
central_widget.setLayout(grid)
# 앱의 Central Widget 에 central_widget 설정
self.setCentralWidget(central_widget)
``` 생략 ```
# 윈도우를 화면에 띄운다
self.show()
- 빈 위젯(QWidget) central_widget 생성
- 세 종류의 문서를 탭 형태로 표현하는 DocTab 위젯을 그리드 레이아웃에 추가
- central_widget에 그리드 레이아웃을 적용
- setCentralWidget 메소드를 호출하여 MainWindow 의 Central Widget으로 central_widget을 설정
2. DocTab
세 종류의 문서를 탭 형태로 나타내기 위해 QTabWidget 을 상속하는 DocTab 위젯을 생성한다.
# 문서 탭 위젯
class DocTab(QTabWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
tab1 = DayCal()
tab2 = BalancedSheet()
tab3 = SH()
self.addTab(tab1, '일일정산서 계산서')
self.addTab(tab2, '대차대조표')
self.addTab(tab3, '수협 입금')
- widgets/docs_window.py 에 QTabWidget을 상속하는 DocTab 클래스를 정의
- 일일 정산서 계산서(DayCal), 대차대조표(BalancedSheet), 수협 입금(SH) 세 종류의 위젯을 각각 탭으로 추가
3. 일일 정산서 계산서(DayCal)
일일 정산서 계산서를 작성하기 위한 DayCal 위젯을 생성한다.
# 일일 정산서 계산서 위젯
class DayCal(QWidget):
# 생성자
def __init__(self):
super().__init__()
self.init_ui()
# ui 초기화
def init_ui(self):
# 화주 목록
owners = ['화주1', '화주2', '화주3']
input_table = QTableWidget()
input_table.setColumnCount(len(owners))
input_table.setHorizontalHeaderLabels(owners)
input_table.setRowCount(19)
input_table.setVerticalHeaderLabels([
'강동총금액', '강동운임', '강동하차비', '강동수수료 4%', '공제후금액', '',
'중매수수료 5%', '화주운임', '화주하차비', '상장수수료 4%', '강동선지급금', '공제합계', '선지급금포함 공제합계', '',
'경매 사무실입금', '가라경매 강동입금', '직접지출', '우리경매', '강동사입'
])
# 그리드 레이아웃
grid = QGridLayout()
# 테이블위젯 추가
grid.addWidget(input_table, 0, 0)
# 레이아웃 세팅
self.setLayout(grid)
- widgets/docs_window.py에 QWidget을 상속하는 DayCal 클래스 생성
- 화주 목록 owners 를 예시로 작성
- 문서 작성을 위한 테이블 위젯 input_table 을 생성, 세로방향 헤더에는 입력받을 항목들이,
가로방향 헤더에는 화주 목록의 화주들의 이름이 오도록 한다. - 그리드 레이아웃에 input_table을 추가
- DayCal 에 그리드 레이아웃 적용
4. 대차대조표(BalancedSheet) / 수협입금(SH)
# 대차대조표 위젯
class BalancedSheet(QWidget):
pass
# 수협 입금 위젯
class SH(QWidget):
pass
이 두 종류의 문서는 추후에 기능을 추가할 예정이기에 우선은 구현을 생략한다.
이제 애플리케이션의 메인화면에 위와 같이 탭 형태로 세 종류의 문서를 작성할 수 있다.
간략하게 구현해둔 일일정산서 계산서 탭에는 테이블이 표시되는 것을 볼 수 있다.
'개인 프로젝트 > Accounting Program' 카테고리의 다른 글
#14 화주 추가 (0) | 2021.11.01 |
---|---|
#13 데이터베이스 연결 (0) | 2021.10.30 |
#11 종료시 위치 기억 (0) | 2021.10.26 |
#10 프로젝트 구조 변경 (0) | 2021.10.20 |
#9 레이아웃(Layout) (0) | 2021.10.18 |