class View(WFrame): ## 조회할 기사 # @var Article article = None ## 생성자 def __init__(self, master=None, article=None, **kw): self.article = article super().__init__(master, **kw) def initializeWidget(self): self.scrollFrame = VScrollWidget(self) self.scrollFrame.pack(fill=BOTH, expand=TRUE) self.lblArticle = Label(self.scrollFrame.frame) self.lblArticle['justify'] = LEFT self.lblArticle['text'] = '\n'.join(self.article.texts) self.lblArticle['font'] = 'Consolas' self.lblArticle['padx'] = 0 self.lblArticle['pady'] = 0 self.lblArticle.pack(padx=(40, 0), pady=(20, 0), anchor=NW) self.text = '기사 보기' self.width = 640 self.height = 480 self.startPosition = StartPosition.centerParent
class Fixer(WFrame): typos = None def __init__(self, master=None, **kw): self.typos = Fixer.load() super().__init__(master, **kw) def initializeWidget(self): self.scrollFrame = VScrollWidget(self) self.scrollFrame.pack(fill=BOTH, expand=TRUE) for typo in self.typos: label = Label(self.scrollFrame.frame) label['justify'] = LEFT label['font'] = 'Consolas' label['padx'] = 0 label['pady'] = 0 label['text'] = typo.toString(Fixer.suggest(typo)) label.pack(padx=(40, 0), pady=(20, 0), anchor=NW) self.text = '오타 알리미' self.width = 640 self.height = 480 self.startPosition = StartPosition.centerParent ## 오타에 대한 조언을하는 메서드 # # 매우 중요! # @return string @staticmethod def suggest(typo): if ' ' in typo.context[typo.expected - 2:][:4]: return '차분한 마음으로 타자해보세요.' elif typo.ch in typo.context[typo.expected - 2:][:4]: return '타속은 너무 신경쓰지 말고,\n연습하는 느낌으로 타자해보세요.' return '좀 더 연습하세요.' @staticmethod def load(): typos = None try: with open('data/typos.pkl', 'rb') as data: typos = pickle.load(data) except: pass return TypoList() if typos == None else typos @staticmethod def save(typoList): typoBak = Fixer.load() with open('data/typos.pkl', 'wb') as typos: pickle.dump(typoBak + typoList, typos)