Python/2.7 for fun.

가계부 프로그램 만들기. (디자인만.)

qkqhxla1 2016. 12. 18. 14:58

개요.

이제 곧 사회생활을 하는 만큼 돈 관리를 해야 한다. 캐나다에서 나름 돈 관리를 잘했었는데, 이번에도 그런 방식으로 돈을 모아보려고 한다. 근데 그때는 손으로 계산... 했었고 이제 만들면 오래쓸거 같기도 하고 재미도 있어보여서 제대로 프로그램을 만들어보기로 했다. 


방법론.

1. gui를 내가 원하는대로 만든다.

2. 돈 관리 알고리즘을 추가한다.

돈 관리 알고리즘.

매달 내가 쓸수 있는 돈이 있고, 매달 쓸수 있는 돈을 4로 나눠서 1주일에 얼마 쓸수 있는지 알려준다. 돈을 썼으면 이번주에서 쓸수 있는 돈의 액수에서 차감되고, -도 될수 있다.(더 생각해봐야될듯) 만약 이번주에 쓰고 남은 돈이 있으면 데이터가 이월되듯이 다음 주의 사용가능한 액수가 그만큼 더 올라간다. 

더 자세한건 만들면서 생각 예정. 그리고 몇번의 개선 작업을 거칠듯..


일단 기초 뼈대만 만드는 작업을 먼저 해야되는 만큼 gui만 qt편집기에서 만들었다. 이후 내부 동작은 더 만들고 글쓸 예정. gui에 대한 코드.


코드짜면서 느낀건 역시 디자인은 어렵다...................




1) new_ui.py


qt편집기로 만들었는데 편집기라 그런지 코드가 짧고 깔끔하진 않다.

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'new.ui'
#
# Created: Sun Dec 18 14:41:51 2016
#      by: PyQt4 UI code generator 4.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(464, 322)

        self.label_1 = QtGui.QLabel(Form)
        self.label_1.setGeometry(QtCore.QRect(20, 200, 81, 16))
        self.label_1.setAlignment(QtCore.Qt.AlignCenter)
        self.label_1.setObjectName(_fromUtf8("label_1"))
        self.label_2 = QtGui.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(20, 140, 81, 16))
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.label_3 = QtGui.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(20, 220, 81, 16))
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName(_fromUtf8("label_3"))
        self.label_4 = QtGui.QLabel(Form)
        self.label_4.setGeometry(QtCore.QRect(20, 160, 81, 16))
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setObjectName(_fromUtf8("label_4"))
        self.label_5 = QtGui.QLabel(Form)
        self.label_5.setGeometry(QtCore.QRect(160, 80, 81, 16))
        self.label_5.setAlignment(QtCore.Qt.AlignCenter)
        self.label_5.setObjectName(_fromUtf8("label_5"))
        self.label_6 = QtGui.QLabel(Form)
        self.label_6.setGeometry(QtCore.QRect(160, 140, 81, 16))
        self.label_6.setAlignment(QtCore.Qt.AlignCenter)
        self.label_6.setObjectName(_fromUtf8("label_6"))
        self.label_7 = QtGui.QLabel(Form)
        self.label_7.setGeometry(QtCore.QRect(240, 100, 21, 16))
        self.label_7.setAlignment(QtCore.Qt.AlignCenter)
        self.label_7.setObjectName(_fromUtf8("label_7"))
        self.label_8 = QtGui.QLabel(Form)
        self.label_8.setGeometry(QtCore.QRect(20, 280, 81, 16))
        self.label_8.setAlignment(QtCore.Qt.AlignCenter)
        self.label_8.setObjectName(_fromUtf8("label_8"))
        self.label_9 = QtGui.QLabel(Form)
        self.label_9.setGeometry(QtCore.QRect(20, 260, 81, 16))
        self.label_9.setAlignment(QtCore.Qt.AlignCenter)
        self.label_9.setObjectName(_fromUtf8("label_9"))
        self.label_10 = QtGui.QLabel(Form)
        self.label_10.setGeometry(QtCore.QRect(160, 20, 81, 16))
        self.label_10.setAlignment(QtCore.Qt.AlignCenter)
        self.label_10.setObjectName(_fromUtf8("label_10"))
        self.label_11 = QtGui.QLabel(Form)
        self.label_11.setGeometry(QtCore.QRect(320, 20, 91, 16))
        self.label_11.setAlignment(QtCore.Qt.AlignCenter)
        self.label_11.setObjectName(_fromUtf8("label_11"))
        self.label_12 = QtGui.QLabel(Form)
        self.label_12.setGeometry(QtCore.QRect(400, 40, 21, 16))
        self.label_12.setAlignment(QtCore.Qt.AlignCenter)
        self.label_12.setObjectName(_fromUtf8("label_12"))

        self.lineEdit_1 = QtGui.QLineEdit(Form)
        self.lineEdit_1.setGeometry(QtCore.QRect(160, 40, 81, 20))
        self.lineEdit_1.setObjectName(_fromUtf8("lineEdit_1"))
        self.lineEdit_2 = QtGui.QLineEdit(Form)
        self.lineEdit_2.setGeometry(QtCore.QRect(160, 100, 81, 20))
        self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2"))
        self.lineEdit_3 = QtGui.QLineEdit(Form)
        self.lineEdit_3.setGeometry(QtCore.QRect(320, 40, 81, 20))
        self.lineEdit_3.setObjectName(_fromUtf8("lineEdit_3"))

        self.pushButton_1 = QtGui.QPushButton(Form)
        self.pushButton_1.setGeometry(QtCore.QRect(10, 20, 101, 23))
        self.pushButton_1.setObjectName(_fromUtf8("pushButton_1"))
        self.pushButton_2 = QtGui.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(10, 60, 101, 23))
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
        self.pushButton_3 = QtGui.QPushButton(Form)
        self.pushButton_3.setGeometry(QtCore.QRect(150, 270, 111, 23))
        self.pushButton_3.setObjectName(_fromUtf8("pushButton_3"))
        self.pushButton_4 = QtGui.QPushButton(Form)
        self.pushButton_4.setGeometry(QtCore.QRect(10, 100, 101, 23))
        self.pushButton_4.setObjectName(_fromUtf8("pushButton_4"))
        self.pushButton_5 = QtGui.QPushButton(Form)
        self.pushButton_5.setGeometry(QtCore.QRect(310, 80, 111, 23))
        self.pushButton_5.setObjectName(_fromUtf8("pushButton_5"))

        self.textEdit = QtGui.QTextEdit(Form)
        self.textEdit.setGeometry(QtCore.QRect(160, 160, 91, 81))
        self.textEdit.setObjectName(_fromUtf8("textEdit"))

        self.calendarWidget = QtGui.QCalendarWidget(Form)
        self.calendarWidget.setGeometry(QtCore.QRect(290, 130, 168, 171))
        self.calendarWidget.setObjectName(_fromUtf8("calendarWidget"))

        self.line_1 = QtGui.QFrame(Form)
        self.line_1.setGeometry(QtCore.QRect(270, 0, 20, 321))
        self.line_1.setFrameShape(QtGui.QFrame.VLine)
        self.line_1.setFrameShadow(QtGui.QFrame.Sunken)
        self.line_1.setObjectName(_fromUtf8("line_1"))
        self.line_2 = QtGui.QFrame(Form)
        self.line_2.setGeometry(QtCore.QRect(120, 0, 20, 321))
        self.line_2.setFrameShape(QtGui.QFrame.VLine)
        self.line_2.setFrameShadow(QtGui.QFrame.Sunken)
        self.line_2.setObjectName(_fromUtf8("line_2"))

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.label_1.setText(_translate("Form", "이번달 남은돈", None))
        self.label_2.setText(_translate("Form", "이번주 남은돈", None))
        self.label_3.setText(_translate("Form", "80 0000원", None))
        self.label_4.setText(_translate("Form", "3 0000원", None))
        self.label_5.setText(_translate("Form", "쓴 돈", None))
        self.label_6.setText(_translate("Form", "사유(짧게)", None))
        self.label_7.setText(_translate("Form", "원", None))
        self.label_8.setText(_translate("Form", "80 0000원", None))
        self.label_9.setText(_translate("Form", "매달 여윳돈", None))
        self.label_10.setText(_translate("Form", "날짜(년/월/일)", None))
        self.label_11.setText(_translate("Form", "매달 여윳돈 설정", None))
        self.label_12.setText(_translate("Form", "원", None))
        self.pushButton_1.setText(_translate("Form", "전체 가계부", None))
        self.pushButton_2.setText(_translate("Form", "저번달 가계부", None))
        self.pushButton_3.setText(_translate("Form", "지출내역 추가", None))
        self.pushButton_4.setText(_translate("Form", "이번달 가계부", None))
        self.pushButton_5.setText(_translate("Form", "설정", None))

2) new_ui.py를 실행시킬 main함수.

# -*- encoding: utf-8 -*-
from PyQt4 import QtGui, QtCore
from new_ui import *
import sys
class MyForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MyForm, self).__init__(parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)

app = QtGui.QApplication(sys.argv)
myapp = MyForm()
myapp.show()
app.exec_()