프로그램의 메인화면이 될 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

+ Recent posts