Exemplo n.º 1
0
class DiaryMainMenu(wx.Frame):
    def __init__(self, parent, size, userId):
        wx.Frame.__init__(self,
                          parent,
                          id=wx.ID_ANY,
                          title=wx.EmptyString,
                          pos=wx.DefaultPosition,
                          size=wx.Size(500, 300),
                          style=wx.DEFAULT_FRAME_STYLE
                          & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX))

        self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)

        bSizer1 = wx.BoxSizer(wx.VERTICAL)

        self.watch_button = wx.Button(self, wx.ID_ANY, u"일기보기",
                                      wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer1.Add(self.watch_button, 1, wx.ALL | wx.EXPAND, 5)

        self.write_button = wx.Button(self, wx.ID_ANY, u"일기쓰기",
                                      wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer1.Add(self.write_button, 1, wx.ALL | wx.EXPAND, 5)

        self.SetSizer(bSizer1)
        self.Layout()

        self.Centre(wx.BOTH)

        # Connect Events
        self.Bind(wx.EVT_CLOSE, self.onClose)
        self.watch_button.Bind(wx.EVT_BUTTON, self.watchButtonClicked)
        self.write_button.Bind(wx.EVT_BUTTON, self.writeButtonClicked)

        self.DbManager = DbManager()
        self.userId = userId

    def __del__(self):
        pass

    # Virtual event handlers, overide them in your derived class
    def onClose(self, event):
        self.DbManager.closeDb()
        self.Destroy()
        sys.exit()

    def watchButtonClicked(self, event):
        if self.IsMaximized():
            frameSize = 'max'
        else:
            frameSize = self.GetSize()
        frame1 = WatchDiaryMenu(parent=None,
                                size=frameSize,
                                userId=self.userId)
        frame1.Show(True)
        self.Show(False)

    def writeButtonClicked(self, event):
        if self.IsMaximized():
            frameSize = 'max'
        else:
            frameSize = self.GetSize()
        frame1 = WriteDiaryMenu(parent=None,
                                mode='w',
                                size=frameSize,
                                userId=self.userId)
        frame1.Show(True)
        self.Show(False)
Exemplo n.º 2
0
class WatchDiaryMenu(wx.Frame):
    def __init__(self, parent, size, userId):
        if size == 'max':
            wx.Frame.__init__(self,
                              parent,
                              id=wx.ID_ANY,
                              title=wx.EmptyString,
                              pos=wx.DefaultPosition,
                              size=wx.Size(500, 300),
                              style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
            self.Maximize()
        else:
            wx.Frame.__init__(self,
                              parent,
                              id=wx.ID_ANY,
                              title=wx.EmptyString,
                              pos=wx.DefaultPosition,
                              size=wx.Size(size),
                              style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)

        self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
        bSizer12 = wx.BoxSizer(wx.VERTICAL)

        self.go_back_button = wx.Button(self, wx.ID_ANY, u"뒤로가기",
                                        wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer12.Add(self.go_back_button, 0, wx.ALL, 5)

        self.m_panel81 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition,
                                  wx.DefaultSize, wx.TAB_TRAVERSAL)
        gbSizer31 = wx.GridBagSizer(0, 0)
        gbSizer31.SetFlexibleDirection(wx.BOTH)
        gbSizer31.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)

        self.range_text = wx.StaticText(self.m_panel81, wx.ID_ANY, u"범위",
                                        wx.DefaultPosition, wx.DefaultSize, 0)
        self.range_text.Wrap(-1)

        gbSizer31.Add(self.range_text, wx.GBPosition(0, 0), wx.GBSpan(1, 1),
                      wx.ALL, 5)

        range_choiceChoices = [u"전체", u"선택"]
        self.range_choice = wx.Choice(self.m_panel81, wx.ID_ANY,
                                      wx.DefaultPosition, wx.DefaultSize,
                                      range_choiceChoices, 0)
        self.range_choice.SetSelection(0)
        gbSizer31.Add(self.range_choice, wx.GBPosition(0, 1), wx.GBSpan(1, 1),
                      wx.ALL, 5)

        self.feel_text = wx.StaticText(self.m_panel81, wx.ID_ANY, u"기분",
                                       wx.DefaultPosition, wx.DefaultSize, 0)
        self.feel_text.Wrap(-1)

        gbSizer31.Add(self.feel_text, wx.GBPosition(0, 2), wx.GBSpan(1, 1),
                      wx.ALL, 5)

        feel_range_choiceChoices = [u"전체", u"선택"]
        self.feel_range_choice = wx.Choice(self.m_panel81, wx.ID_ANY,
                                           wx.DefaultPosition, wx.DefaultSize,
                                           feel_range_choiceChoices, 0)
        self.feel_range_choice.SetSelection(0)
        gbSizer31.Add(self.feel_range_choice, wx.GBPosition(0, 3),
                      wx.GBSpan(1, 1), wx.ALL, 5)

        self.thoughts_count_text = wx.StaticText(self.m_panel81, wx.ID_ANY,
                                                 u"생각개수", wx.DefaultPosition,
                                                 wx.DefaultSize, 0)
        self.thoughts_count_text.Wrap(-1)

        gbSizer31.Add(self.thoughts_count_text, wx.GBPosition(0, 4),
                      wx.GBSpan(1, 1), wx.ALL, 5)

        feel_range_choice1Choices = [u"전체", u"선택"]
        self.feel_range_choice1 = wx.Choice(self.m_panel81, wx.ID_ANY,
                                            wx.DefaultPosition, wx.DefaultSize,
                                            feel_range_choice1Choices, 0)
        self.feel_range_choice1.SetSelection(0)
        gbSizer31.Add(self.feel_range_choice1, wx.GBPosition(0, 5),
                      wx.GBSpan(1, 1), wx.ALL, 5)

        self.search_button = wx.Button(self.m_panel81, wx.ID_ANY, u"검색",
                                       wx.DefaultPosition, wx.DefaultSize, 0)
        gbSizer31.Add(self.search_button, wx.GBPosition(0, 6), wx.GBSpan(1, 1),
                      wx.ALL, 5)

        self.m_panel81.SetSizer(gbSizer31)
        self.m_panel81.Layout()
        gbSizer31.Fit(self.m_panel81)
        bSizer12.Add(self.m_panel81, 0, wx.ALL | wx.EXPAND, 5)

        self.m_scrolledWindow2 = wx.ScrolledWindow(self, wx.ID_ANY,
                                                   wx.DefaultPosition,
                                                   wx.DefaultSize,
                                                   wx.HSCROLL | wx.VSCROLL)
        self.m_scrolledWindow2.SetScrollRate(5, 5)
        bSizer22 = wx.BoxSizer(wx.VERTICAL)

        self.starPng = wx.Image('star.png', wx.BITMAP_TYPE_ANY)
        frameSizeX, frameSizeY = self.GetSize()
        self.starPng.Rescale(16, 16)
        self.starPng = self.starPng.ConvertToBitmap()
        del frameSizeX, frameSizeY

        self.DbManager = DbManager()
        self.userId = userId

        diary = self.DbManager.findDiaryWithCondition(startDate='1970-01-01',
                                                      finishDate='2099-01-01',
                                                      startFeelRange=1,
                                                      finishFeelRange=5,
                                                      thoughtsStartRange=0,
                                                      thoughtsFinishRange=100,
                                                      userId=self.userId)
        for i in range(len(diary)):
            date = diary[i][0]
            time = diary[i][1]
            todayFeel = diary[i][2]
            todayThoughtsCount = diary[i][3]

            diaryPanel = self.makeDiaryPanel(date, time, todayFeel,
                                             todayThoughtsCount, len(diary),
                                             self.m_scrolledWindow2)
            bSizer22.Add(diaryPanel, 1, wx.EXPAND | wx.ALL, 5)

        self.m_scrolledWindow2.SetSizer(bSizer22)
        self.m_scrolledWindow2.Layout()
        bSizer22.Fit(self.m_scrolledWindow2)
        bSizer12.Add(self.m_scrolledWindow2, 1, wx.EXPAND | wx.ALL, 5)

        self.SetSizer(bSizer12)
        self.Layout()

        self.Centre(wx.BOTH)

        # Connect Events
        self.Bind(wx.EVT_CLOSE, self.onClose)
        self.range_choice.Bind(wx.EVT_CHOICE, self.rangeChoiced)
        self.feel_range_choice.Bind(wx.EVT_CHOICE, self.feelRangeChoiced)
        self.feel_range_choice1.Bind(wx.EVT_CHOICE, self.thoughtsRangeChoiced)
        self.search_button.Bind(wx.EVT_BUTTON, self.searchButtonClicked)
        self.go_back_button.Bind(wx.EVT_BUTTON, self.goBackButtonClicked)

    def __del__(self):
        pass

    def makeDiaryPanel(self, date, time, star, thoughtsCount, diaryCount,
                       m_scrolledWindow2):
        m_panel8 = wx.Panel(m_scrolledWindow2, wx.ID_ANY, wx.DefaultPosition,
                            wx.DefaultSize, wx.TAB_TRAVERSAL)
        gbSizer3 = wx.GridBagSizer(0, 0)
        gbSizer3.SetFlexibleDirection(wx.BOTH)
        gbSizer3.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)

        date_text = wx.StaticText(m_panel8, wx.ID_ANY, u'{0}'.format(date),
                                  wx.DefaultPosition, wx.DefaultSize, 0)
        date_text.Wrap(-1)

        gbSizer3.Add(date_text, wx.GBPosition(0, 0), wx.GBSpan(1, 1), wx.ALL,
                     5)

        time_text = wx.StaticText(m_panel8, wx.ID_ANY, u"{0}".format(time),
                                  wx.DefaultPosition, wx.DefaultSize, 0)
        time_text.Wrap(-1)

        gbSizer3.Add(time_text, wx.GBPosition(0, 2), wx.GBSpan(1, 1), wx.ALL,
                     5)

        thoughts_count = wx.StaticText(m_panel8, wx.ID_ANY,
                                       u"{0}".format(thoughtsCount),
                                       wx.DefaultPosition, wx.DefaultSize, 0)
        thoughts_count.Wrap(-1)

        gbSizer3.Add(thoughts_count, wx.GBPosition(0, 3), wx.GBSpan(1, 1),
                     wx.ALL, 5)

        diary_show_button = wx.Button(m_panel8, wx.ID_ANY, u"일기보기",
                                      wx.DefaultPosition, wx.DefaultSize, 0)
        gbSizer3.Add(diary_show_button, wx.GBPosition(0, 5), wx.GBSpan(1, 1),
                     wx.ALL, 5)

        m_panel18 = wx.Panel(m_panel8, wx.ID_ANY, wx.DefaultPosition,
                             wx.DefaultSize, wx.TAB_TRAVERSAL)
        gbSizer4 = wx.GridBagSizer(0, 0)
        gbSizer4.SetFlexibleDirection(wx.BOTH)
        gbSizer4.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)

        for i in range(int(star)):
            star = wx.StaticBitmap(m_panel18, wx.ID_ANY, self.starPng,
                                   wx.DefaultPosition, wx.DefaultSize, 0)
            gbSizer4.Add(star, wx.GBPosition(0, i), wx.GBSpan(1, 1),
                         wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)

        m_panel18.SetSizer(gbSizer4)
        m_panel18.Layout()
        gbSizer4.Fit(m_panel18)
        gbSizer3.Add(m_panel18, wx.GBPosition(0, 4), wx.GBSpan(1, 1),
                     wx.EXPAND | wx.ALL, 5)

        m_panel8.SetSizer(gbSizer3)
        m_panel8.Layout()
        gbSizer3.Fit(m_panel8)

        diary_show_button.Bind(
            wx.EVT_BUTTON,
            lambda event: self.diaryShowButtonClicked(event, date))
        return m_panel8

    # Virtual event handlers, overide them in your derived class
    def onClose(self, event):
        self.DbManager.closeDb()
        self.Destroy()
        sys.exit()

    def rangeChoiced(self, event):
        event.Skip()

    def feelRangeChoiced(self, event):
        event.Skip()

    def thoughtsRangeChoiced(self, event):
        event.Skip()

    def searchButtonClicked(self, event):
        event.Skip()

    def goBackButtonClicked(self, event):
        if self.IsMaximized():
            frameSize = 'max'
        else:
            frameSize = self.GetSize()
        frame1 = DiaryMainMenu(parent=None, size=frameSize, userId=self.userId)
        frame1.Show(True)
        self.Show(False)

    def diaryShowButtonClicked(self, event, date):
        watchDiary = WatchDiary()
        diaryContent = watchDiary.readCorrectDiaryTxt(date)
        todayThoughtsContent = watchDiary.readCorrectTodayThoughtsTxt(date)
        diaryInfo = self.DbManager.readDiaryInfo(date, self.userId)
        if self.IsMaximized():
            frameSize = 'max'
        else:
            frameSize = self.GetSize()
        if date == str(arrow.now().date()):
            frame1 = WriteDiaryMenu(parent=None,
                                    mode='w',
                                    size=frameSize,
                                    userId=self.userId,
                                    diaryContent=diaryContent,
                                    todayFeel=diaryInfo[2],
                                    todayThoughts=todayThoughtsContent)
        else:
            frame1 = WriteDiaryMenu(parent=None,
                                    mode='r',
                                    size=frameSize,
                                    userId=self.userId,
                                    diaryContent=diaryContent,
                                    todayFeel=diaryInfo[2],
                                    todayThoughts=todayThoughtsContent)
        frame1.Show(True)
        self.Show(False)
Exemplo n.º 3
0
 def onClose(self, event):
     a = DbManager()
     a.closeDb()
     self.Destroy()
     sys.exit()
Exemplo n.º 4
0
class WriteDiaryMenu(wx.Frame):
    def __init__(self,
                 parent,
                 mode,
                 size,
                 userId,
                 diaryContent=None,
                 todayFeel=5,
                 todayThoughts=None):
        if size == 'max':
            wx.Frame.__init__(self,
                              parent,
                              id=wx.ID_ANY,
                              title=wx.EmptyString,
                              pos=wx.DefaultPosition,
                              size=wx.Size(500, 300),
                              style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
            self.Maximize()
        else:
            wx.Frame.__init__(self,
                              parent,
                              id=wx.ID_ANY,
                              title=wx.EmptyString,
                              pos=wx.DefaultPosition,
                              size=wx.Size(size),
                              style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)

        self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)

        gSizer3 = wx.GridSizer(0, 2, 0, 0)

        bSizer7 = wx.BoxSizer(wx.VERTICAL)

        self.go_back_button = wx.Button(self, wx.ID_ANY, u"뒤로가기",
                                        wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer7.Add(self.go_back_button, 0, wx.ALL, 5)

        if mode == "w":
            if diaryContent == None:
                self.diary_input_box = wx.TextCtrl(self, wx.ID_ANY,
                                                   wx.EmptyString,
                                                   wx.DefaultPosition,
                                                   wx.DefaultSize,
                                                   wx.TE_MULTILINE)
            else:
                self.diary_input_box = wx.TextCtrl(self, wx.ID_ANY,
                                                   u"{0}".format(diaryContent),
                                                   wx.DefaultPosition,
                                                   wx.DefaultSize,
                                                   wx.TE_MULTILINE)
        else:
            self.diary_input_box = wx.TextCtrl(
                self, wx.ID_ANY, u'{0}'.format(diaryContent),
                wx.DefaultPosition, wx.DefaultSize,
                wx.TE_MULTILINE | wx.TE_READONLY)
        bSizer7.Add(self.diary_input_box, 1, wx.ALL | wx.EXPAND, 5)

        gSizer3.Add(bSizer7, 1, wx.EXPAND, 5)

        bSizer8 = wx.BoxSizer(wx.VERTICAL)

        self.m_panel1 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition,
                                 wx.DefaultSize, wx.TAB_TRAVERSAL)
        bSizer9 = wx.BoxSizer(wx.VERTICAL)

        self.today_feel_text = wx.StaticText(self.m_panel1, wx.ID_ANY,
                                             u"오늘 기분1/5", wx.DefaultPosition,
                                             wx.DefaultSize, 0)
        self.today_feel_text.Wrap(-1)

        bSizer9.Add(self.today_feel_text, 0, wx.ALL, 5)
        if mode == 'w':
            self.today_feel_slider = wx.Slider(
                self.m_panel1, wx.ID_ANY, todayFeel, 1, 5, wx.DefaultPosition,
                wx.DefaultSize,
                wx.SL_HORIZONTAL | wx.SL_SELRANGE | wx.SL_VALUE_LABEL)
            bSizer9.Add(self.today_feel_slider, 0, wx.ALL | wx.EXPAND, 5)
        else:
            self.today_feel_text = wx.StaticText(self.m_panel1, wx.ID_ANY,
                                                 u"{0}".format(todayFeel),
                                                 wx.DefaultPosition,
                                                 wx.DefaultSize, 0)
            self.today_feel_text.Wrap(-1)
            bSizer9.Add(self.today_feel_text, 0, wx.ALL, 5)

        self.m_panel1.SetSizer(bSizer9)
        self.m_panel1.Layout()
        bSizer9.Fit(self.m_panel1)
        bSizer8.Add(self.m_panel1, 0, wx.EXPAND | wx.ALL, 5)

        self.m_panel2 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition,
                                 wx.DefaultSize, wx.TAB_TRAVERSAL)
        bSizer10 = wx.BoxSizer(wx.VERTICAL)

        self.today_thoughts_text = wx.StaticText(self.m_panel2, wx.ID_ANY,
                                                 u"오늘 생각한것",
                                                 wx.DefaultPosition,
                                                 wx.DefaultSize, 0)
        self.today_thoughts_text.Wrap(-1)

        bSizer10.Add(self.today_thoughts_text, 0, wx.ALL, 5)

        if mode == 'w':
            if todayThoughts == None:
                self.today_thoughts_input_box = wx.TextCtrl(
                    self.m_panel2, wx.ID_ANY, wx.EmptyString,
                    wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE)
            else:
                self.today_thoughts_input_box = wx.TextCtrl(
                    self.m_panel2, wx.ID_ANY, u"{0}".format(todayThoughts),
                    wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE)
        else:
            self.today_thoughts_input_box = wx.TextCtrl(
                self.m_panel2, wx.ID_ANY, u"{0}".format(todayThoughts),
                wx.DefaultPosition, wx.DefaultSize,
                wx.TE_MULTILINE | wx.TE_READONLY)
        bSizer10.Add(self.today_thoughts_input_box, 1, wx.ALL | wx.EXPAND, 5)

        self.m_panel2.SetSizer(bSizer10)
        self.m_panel2.Layout()
        bSizer10.Fit(self.m_panel2)
        bSizer8.Add(self.m_panel2, 1, wx.EXPAND | wx.ALL, 5)

        if mode == 'w':
            self.save_diary_button = wx.Button(self, wx.ID_ANY, u"일기 저장",
                                               wx.DefaultPosition,
                                               wx.DefaultSize, 0)
            bSizer8.Add(self.save_diary_button, 0,
                        wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)
            self.save_diary_button.Bind(wx.EVT_BUTTON, self.saveButtonClicked)

        gSizer3.Add(bSizer8, 1, wx.EXPAND, 5)

        self.SetSizer(gSizer3)
        self.Layout()

        self.Centre(wx.BOTH)

        # Connect Events
        self.Bind(wx.EVT_CLOSE, self.onClose)
        self.go_back_button.Bind(wx.EVT_BUTTON, self.goBackButtonClicked)

        self.dbManager = DbManager()
        self.WriteDiary = WriteDiary()
        self.userId = userId

    def __del__(self):
        pass

    # Virtual event handlers, overide them in your derived class
    def onClose(self, event):
        self.dbManager.closeDb()
        self.Destroy()
        sys.exit()

    def goBackButtonClicked(self, event):
        if self.IsMaximized():
            frameSize = 'max'
        else:
            frameSize = self.GetSize()
        frame1 = DiaryMainMenu(parent=None, size=frameSize, userId=self.userId)
        frame1.Show(True)
        self.Show(False)

    def saveButtonClicked(self, event):
        self.WriteDiary.saveDiaryTxt(arrow.now().date(),
                                     self.diary_input_box.GetValue())
        self.WriteDiary.saveTodayThoughtsTxt(
            arrow.now().date(), self.today_thoughts_input_box.GetValue())
        self.dbManager.saveDiaryInfo(arrow.now().date(),
                                     str(arrow.now().time())[:5],
                                     self.today_feel_slider.GetValue(),
                                     self.today_thoughts_input_box.GetValue(),
                                     self.userId)
        wx.MessageBox("일기 저장 성공!")

        if self.IsMaximized():
            frameSize = 'max'
        else:
            frameSize = self.GetSize()
        frame1 = DiaryMainMenu(parent=None, size=frameSize, userId=self.userId)
        frame1.Show(True)
        self.Show(False)
Exemplo n.º 5
0
class SignUpMenu(wx.Frame):
    def __init__(self, parent, size):
        wx.Frame.__init__(self,
                          parent,
                          id=wx.ID_ANY,
                          title=wx.EmptyString,
                          pos=wx.DefaultPosition,
                          size=wx.Size(500, 300),
                          style=wx.DEFAULT_FRAME_STYLE
                          & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX))

        self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)

        gSizer2 = wx.GridSizer(0, 2, 0, 0)

        bSizer7 = wx.BoxSizer(wx.VERTICAL)

        self.m_panel6 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition,
                                 wx.DefaultSize, wx.TAB_TRAVERSAL)
        gSizer7 = wx.GridSizer(0, 2, 0, 0)

        bSizer17 = wx.BoxSizer(wx.VERTICAL)

        self.goBackButton = wx.Button(self.m_panel6, wx.ID_ANY, u"뒤로가기",
                                      wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer17.Add(self.goBackButton, 0, wx.ALL, 5)

        gSizer7.Add(bSizer17, 1, wx.EXPAND, 5)

        bSizer18 = wx.BoxSizer(wx.VERTICAL)

        self.id_confirm_button = wx.Button(self.m_panel6, wx.ID_ANY, u"ID중복확인",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           0)
        bSizer18.Add(self.id_confirm_button, 0,
                     wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)

        gSizer7.Add(bSizer18, 1, wx.EXPAND, 5)

        self.m_panel6.SetSizer(gSizer7)
        self.m_panel6.Layout()
        gSizer7.Fit(self.m_panel6)
        bSizer7.Add(self.m_panel6, 0, wx.ALL | wx.EXPAND, 5)

        self.m_panel5 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition,
                                 wx.DefaultSize, wx.TAB_TRAVERSAL)
        gSizer5 = wx.GridSizer(0, 2, 0, 0)

        bSizer13 = wx.BoxSizer(wx.VERTICAL)

        self.id_input_text = wx.StaticText(self.m_panel5, wx.ID_ANY, u"ID",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           0)
        self.id_input_text.Wrap(-1)

        bSizer13.Add(self.id_input_text, 0, wx.ALL | wx.EXPAND, 5)

        self.id_input_box = wx.TextCtrl(self.m_panel5, wx.ID_ANY,
                                        wx.EmptyString, wx.DefaultPosition,
                                        wx.DefaultSize, 0)
        bSizer13.Add(self.id_input_box, 0, wx.ALL | wx.EXPAND, 5)

        self.pw_input_text = wx.StaticText(self.m_panel5, wx.ID_ANY, u"비밀번호",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           0)
        self.pw_input_text.Wrap(-1)

        bSizer13.Add(self.pw_input_text, 0, wx.ALL | wx.EXPAND, 5)

        self.pw_input_box = wx.TextCtrl(self.m_panel5, wx.ID_ANY,
                                        wx.EmptyString, wx.DefaultPosition,
                                        wx.DefaultSize, wx.TE_PASSWORD)
        bSizer13.Add(self.pw_input_box, 0, wx.ALL | wx.EXPAND, 5)

        self.pw_re_input_text = wx.StaticText(self.m_panel5, wx.ID_ANY,
                                              u"비밀번호 재입력", wx.DefaultPosition,
                                              wx.DefaultSize, 0)
        self.pw_re_input_text.Wrap(-1)

        bSizer13.Add(self.pw_re_input_text, 0, wx.ALL | wx.EXPAND, 5)

        self.pw_re_input_box = wx.TextCtrl(self.m_panel5, wx.ID_ANY,
                                           wx.EmptyString, wx.DefaultPosition,
                                           wx.DefaultSize, wx.TE_PASSWORD)
        bSizer13.Add(self.pw_re_input_box, 0, wx.ALL | wx.EXPAND, 5)

        gSizer5.Add(bSizer13, 1, wx.EXPAND, 5)

        bSizer15 = wx.BoxSizer(wx.VERTICAL)

        self.pw_check_text = wx.StaticText(
            self.m_panel5, wx.ID_ANY,
            u"id,비밀번호 둘다\n영어 대소문자, \n숫자만 가능\n\n비밀번호는\n10자 이상\n영어,숫자 필수",
            wx.DefaultPosition, wx.DefaultSize, 0)
        self.pw_check_text.Wrap(-1)

        bSizer15.Add(self.pw_check_text, 1, wx.ALL | wx.EXPAND, 5)

        self.pw_confirm_img = wx.StaticBitmap(self.m_panel5, wx.ID_ANY,
                                              wx.NullBitmap,
                                              wx.DefaultPosition,
                                              wx.DefaultSize, 0)
        bSizer15.Add(self.pw_confirm_img, 0,
                     wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)

        bSizer15.Add((0, 0), 1, wx.EXPAND, 5)

        gSizer5.Add(bSizer15, 1, wx.EXPAND, 5)

        self.m_panel5.SetSizer(gSizer5)
        self.m_panel5.Layout()
        gSizer5.Fit(self.m_panel5)
        bSizer7.Add(self.m_panel5, 1, wx.EXPAND | wx.ALL, 5)

        self.re_pw_correct_text = wx.StaticText(self, wx.ID_ANY,
                                                wx.EmptyString,
                                                wx.DefaultPosition,
                                                wx.DefaultSize, 0)
        self.re_pw_correct_text.Wrap(-1)

        bSizer7.Add(self.re_pw_correct_text, 0, wx.ALL, 5)

        gSizer2.Add(bSizer7, 1, wx.EXPAND | wx.RIGHT, 5)

        bSizer8 = wx.BoxSizer(wx.VERTICAL)

        self.account_repair_question_text = wx.StaticText(
            self, wx.ID_ANY, u"보안질문", wx.DefaultPosition, wx.DefaultSize, 0)
        self.account_repair_question_text.Wrap(-1)

        bSizer8.Add(self.account_repair_question_text, 0, wx.ALL | wx.EXPAND,
                    5)

        account_repair_question_choiceChoices = [
            u"가장 아끼는 물건은?", u"가장 좋아했던 선생님 성함은?", u"가장 감명깊게 읽은 책은?",
            u"가장 어려웠던 책은?"
        ]
        self.account_repair_question_choice = wx.Choice(
            self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize,
            account_repair_question_choiceChoices, 0)
        self.account_repair_question_choice.SetSelection(0)
        bSizer8.Add(self.account_repair_question_choice, 0, wx.ALL | wx.EXPAND,
                    5)

        self.answer_text = wx.StaticText(self, wx.ID_ANY, u"답변",
                                         wx.DefaultPosition, wx.DefaultSize, 0)
        self.answer_text.Wrap(-1)

        bSizer8.Add(self.answer_text, 0, wx.ALL | wx.EXPAND, 5)

        self.answer_input_box = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString,
                                            wx.DefaultPosition, wx.DefaultSize,
                                            0)
        bSizer8.Add(self.answer_input_box, 0, wx.ALL | wx.EXPAND, 5)

        self.sign_up_button = wx.Button(self, wx.ID_ANY, u"회원가입",
                                        wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer8.Add(self.sign_up_button, 0,
                    wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)

        gSizer2.Add(bSizer8, 1, wx.EXPAND, 5)

        self.SetSizer(gSizer2)
        self.Layout()

        self.Centre(wx.BOTH)

        # Connect Events
        self.Bind(wx.EVT_CLOSE, self.onClose)
        self.goBackButton.Bind(wx.EVT_BUTTON, self.goBackButtonClicked)
        self.id_confirm_button.Bind(wx.EVT_BUTTON, self.idConfirmButtonClicked)
        self.id_input_box.Bind(wx.EVT_TEXT, self.textInputedOnId)
        self.pw_input_box.Bind(wx.EVT_TEXT, self.textInputedOnPw)
        self.pw_re_input_box.Bind(wx.EVT_TEXT, self.textInputedOnRePw)
        self.account_repair_question_choice.Bind(wx.EVT_CHOICE, self.choiced)
        self.sign_up_button.Bind(wx.EVT_BUTTON, self.signUpButtonClicked)

        self.accountManager = AccountManager()
        self.sQuestionNum = 0
        self.dbManager = DbManager()
        self.correctSymbolPng = wx.Image('tick.png', wx.BITMAP_TYPE_ANY)
        self.correctSymbolPng.Rescale(32, 32)
        self.correctSymbolPng = self.correctSymbolPng.ConvertToBitmap()
        self.incorrectSymbolPng = wx.Image('close.png', wx.BITMAP_TYPE_ANY)
        self.incorrectSymbolPng.Rescale(32, 32)
        self.incorrectSymbolPng = self.incorrectSymbolPng.ConvertToBitmap()
        self.pw_confirm_img.SetBitmap(self.incorrectSymbolPng)
        self.idFlag = -1

    def __del__(self):
        pass

    # Virtual event handlers, overide them in your derived class

    def onClose(self, event):
        self.dbManager.closeDb()
        self.Destroy()
        sys.exit()

    def goBackButtonClicked(self, event):
        if self.IsMaximized():
            frameSize = 'max'
        else:
            frameSize = self.GetSize()
        frame1 = StartMenu(parent=None, size=frameSize)
        frame1.Show(True)
        self.Show(False)

    def idConfirmButtonClicked(self, event):
        allId = self.dbManager.readAllId()
        id = (self.id_input_box.GetValue(), )
        self.idFlag = False
        if not (id in allId):
            self.idFlag = True
        if self.idFlag:
            wx.MessageBox(f"'{id[0]}': 사용가능한 아이디 입니다.")
        else:
            wx.MessageBox(f"'{id[0]}': 사용불가능한 아이디 입니다.")

    def textInputedOnId(self, event):
        self.idFlag = -1

    def textInputedOnPw(self, event):
        pw = self.pw_input_box.GetValue()

        self.pwFollowRule = True
        if len(pw) < 9:
            self.pwFollowRule = False
        elif re.findall(
                '[a-zA-Z0-9]+', pw
        )[0] != pw:  # re에서 영어, 숫자만 찾기. 만약 다른 문자가 있다면 중간에 끊김 -> 본래 문자열과 달라짐 -> 구별 가능.
            self.pwFollowRule = False
        elif len(re.findall('[a-zA-Z]', pw)) == 0:
            self.pwFollowRule = False
        elif len(re.findall('\d', pw)) == 0:
            self.pwFollowRule = False

        if self.pwFollowRule:
            self.pw_confirm_img.SetBitmap(self.correctSymbolPng)
        else:
            self.pw_confirm_img.SetBitmap(self.incorrectSymbolPng)

    def textInputedOnRePw(self, event):
        self.pwFlag = self.pw_input_box.GetValue(
        ) == self.pw_re_input_box.GetValue()
        if self.pwFlag:
            self.re_pw_correct_text.SetLabel("비밀번호가 일치합니다!")
        else:
            self.re_pw_correct_text.SetLabel("비밀번호가 일치하지 않습니다.")

    def choiced(self, event):
        self.sQuestionNum = self.account_repair_question_choice.GetSelection()
        print(self.sQuestionNum)
        return self.sQuestionNum

    def signUpButtonClicked(self, event):
        if self.idFlag == -1:
            wx.MessageBox("아이디 중복확인 해주세요!")
        try:
            if re.findall('[a-zA-Z0-9]+', self.id_input_box.GetValue()
                          )[0] != self.id_input_box.GetValue():
                wx.MessageBox("이 아이디는 사용할 수 없습니다(영어 대소문자,숫자로 이루어지지 않음)")
                self.idFlag = False
        except:
            if len(
                    re.findall('[^a-zA-Z0-9]+',
                               self.id_input_box.GetValue())[0]) > 0:
                wx.MessageBox("이 아이디는 사용할 수 없습니다(영어 대소문자,숫자로 이루어지지 않음)")
                self.idFlag = False
            else:
                raise BaseException
        if not (self.id_input_box.GetValue() == None
                and self.pw_input_box.GetValue() == None
                and self.answer_input_box.GetValue() == None):
            if self.idFlag == True and self.pwFlag == True and self.pwFollowRule == True:
                loginSuccess = self.accountManager.registerUser(
                    self.id_input_box.GetValue(), self.pw_input_box.GetValue(),
                    self.sQuestionNum, self.answer_input_box.GetValue())
                if loginSuccess:
                    wx.MessageBox(
                        f"회원가입 성공! 아이디는 '{self.id_input_box.GetValue()}'")
                    if self.IsMaximized():
                        frameSize = 'max'
                    else:
                        frameSize = self.GetSize()
                    frame1 = DiaryMainMenu(parent=None,
                                           size=frameSize,
                                           userId=self.id_input_box.GetValue())
                    frame1.Show(True)
                    self.Show(False)
                else:
                    wx.MessageBox(f"회원가입 실패ㅜㅜ")
        else:
            wx.MessageBox('공란이 있으면 안됨')
        return self.id_input_box.GetValue(), self.pw_input_box.GetValue(
        ), self.sQuestionNum, self.answer_input_box.GetValue()
Exemplo n.º 6
0
class LoginMenu(wx.Frame):
    def __init__(self, parent, size):
        wx.Frame.__init__(self,
                          parent,
                          id=wx.ID_ANY,
                          title=wx.EmptyString,
                          pos=wx.DefaultPosition,
                          size=wx.Size(300, 300),
                          style=wx.DEFAULT_FRAME_STYLE
                          & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX))

        self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)

        bSizer2 = wx.BoxSizer(wx.VERTICAL)

        self.go_back_button = wx.Button(self, wx.ID_ANY, u"뒤로가기",
                                        wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer2.Add(self.go_back_button, 0, wx.ALL, 5)

        self.m_panel7 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition,
                                 wx.DefaultSize, 0)
        bSizer19 = wx.BoxSizer(wx.VERTICAL)

        self.id_input_box = wx.TextCtrl(self.m_panel7, wx.ID_ANY,
                                        wx.EmptyString, wx.DefaultPosition,
                                        wx.DefaultSize, 0)
        bSizer19.Add(self.id_input_box, 0, wx.ALL, 5)

        self.pw_input_box = wx.TextCtrl(self.m_panel7, wx.ID_ANY,
                                        wx.EmptyString, wx.DefaultPosition,
                                        wx.DefaultSize,
                                        wx.TE_PASSWORD | wx.TE_PROCESS_ENTER)
        bSizer19.Add(self.pw_input_box, 0, wx.ALL, 5)

        self.m_panel7.SetSizer(bSizer19)
        self.m_panel7.Layout()
        bSizer19.Fit(self.m_panel7)
        bSizer2.Add(self.m_panel7, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)

        self.login_button = wx.Button(self, wx.ID_ANY, u"로그인",
                                      wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer2.Add(self.login_button, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL,
                    5)

        self.SetSizer(bSizer2)
        self.Layout()

        self.Centre(wx.BOTH)

        # Connect Events
        self.Bind(wx.EVT_CLOSE, self.onClose)
        self.go_back_button.Bind(wx.EVT_BUTTON, self.goBackButtonClicked)
        self.pw_input_box.Bind(wx.EVT_TEXT_ENTER, self.pwInputFinished)
        self.login_button.Bind(wx.EVT_BUTTON, self.loginButtonClicked)

        self.DbManager = DbManager()
        self.accountManager = AccountManager()

    def __del__(self):
        pass

    # Virtual event handlers, overide them in your derived class
    def onClose(self, event):
        self.DbManager.closeDb()
        self.Destroy()
        sys.exit()

    def goBackButtonClicked(self, event):
        if self.IsMaximized():
            frameSize = 'max'
        else:
            frameSize = self.GetSize()
        frame1 = StartMenu(parent=None, size=frameSize)
        frame1.Show(True)
        self.Show(False)

    def pwInputFinished(self, event):
        self.loginButtonClicked(event=None)

    def loginButtonClicked(self, event):
        id = self.id_input_box.GetValue()
        pw = self.pw_input_box.GetValue()

        pwFollowRule = True
        try:
            if re.findall('[a-zA-Z0-9]+', pw)[0] != pw:
                pwFollowRule = False
        except:
            if len(re.findall('[^a-zA-Z0-9]+', pw)[0]) > 0:
                pwFollowRule = False
            else:
                raise BaseException

        idFollowRule = True
        try:
            if re.findall('[a-zA-Z0-9]+', id)[0] != id:
                idFollowRule = False
        except:
            if len(re.findall('[^a-zA-Z0-9]+', id)[0]) > 0:
                idFollowRule = False
            else:
                raise BaseException

        if pwFollowRule and idFollowRule:
            loginAccepted = self.accountManager.logIn(id, pw)
        else:
            loginAccepted = False

        if loginAccepted:
            if self.IsMaximized():
                frameSize = 'max'
            else:
                frameSize = self.GetSize()
            frame1 = DiaryMainMenu(parent=None,
                                   size=frameSize,
                                   userId=self.id_input_box.GetValue())
            frame1.Show(True)
            self.Show(False)
        else:
            wx.MessageBox("로그인 실패!")

        return loginAccepted