def _init_widgets(self, events): # 筆數 current_y = 15 Label(self, text='Order', width=6, font=("", 12)).place(x=4, y=current_y) self.order = IntVar() # 下一次的筆數 Label(self, textvariable=self.order, width=6, font=("", 12)).place(x=4, y=current_y + 27) # 酒廠 Label(self, text='Event', width=14, font=("", 12)).place(x=57, y=current_y) self.event_selector = ObjectCombobox(self, setter=lambda obj: obj.name, width=14, justify=CENTER) self.event_selector.set_objects(events) self.event_selector.place(x=64, y=current_y + 27) # 角色 self.character_selector = CharacterSelectorCanvas(self) self.character_selector.place(x=201, y=current_y - 4) # 花費 Label(self, text='Cost', width=9, font=("", 12)).place(x=338, y=current_y) self.cost_selector = ttk.Combobox(self, state='readonly', width=8, justify=CENTER) self.cost_selector['values'] = DRAW_LOTS_COST self.cost_selector.place(x=346, y=current_y + 27) # 時間欄位,送交、取消並關閉的按鈕 current_y = 90 self.date_time = StringVar() self.date_time_entry = Entry(self, textvariable=self.date_time, width=11, font=(SCP, 10), justify=CENTER) self.date_time_entry.place(x=14, y=current_y + 5) button = Button(self, text="送出此記錄", width=30, borderwidth=3) button.place(x=117, y=current_y) button["command"] = self.submitting button = Button(self, text="關閉視窗", width=10, borderwidth=3) button.place(x=348, y=current_y) button["command"] = self.destroy
class RecordWindow(BasicWindow): def __init__(self, master, record, events, callback, width=445, height=133, **kwargs): BasicWindow.__init__(self, master, width=width, height=height, **kwargs) self.callback = callback self._init_widgets(events) self._init_context(record) # 註冊 Enter 確認送出 self.bind('<Return>', lambda event: self.submitting()) # 註冊編輯 DateTime 熱鍵 self.bind('<Control-d>', lambda event: ( self.date_time_entry.focus_set(), self.date_time_entry.selection_range(0, END))) def _init_widgets(self, events): # 筆數 current_y = 15 Label(self, text='Order', width=6, font=("", 12)).place(x=4, y=current_y) self.order = IntVar() # 下一次的筆數 Label(self, textvariable=self.order, width=6, font=("", 12)).place(x=4, y=current_y + 27) # 酒廠 Label(self, text='Event', width=14, font=("", 12)).place(x=57, y=current_y) self.event_selector = ObjectCombobox(self, setter=lambda obj: obj.name, width=14, justify=CENTER) self.event_selector.set_objects(events) self.event_selector.place(x=64, y=current_y + 27) # 角色 self.character_selector = CharacterSelectorCanvas(self) self.character_selector.place(x=201, y=current_y - 4) # 花費 Label(self, text='Cost', width=9, font=("", 12)).place(x=338, y=current_y) self.cost_selector = ttk.Combobox(self, state='readonly', width=8, justify=CENTER) self.cost_selector['values'] = DRAW_LOTS_COST self.cost_selector.place(x=346, y=current_y + 27) # 時間欄位,送交、取消並關閉的按鈕 current_y = 90 self.date_time = StringVar() self.date_time_entry = Entry(self, textvariable=self.date_time, width=11, font=(SCP, 10), justify=CENTER) self.date_time_entry.place(x=14, y=current_y + 5) button = Button(self, text="送出此記錄", width=30, borderwidth=3) button.place(x=117, y=current_y) button["command"] = self.submitting button = Button(self, text="關閉視窗", width=10, borderwidth=3) button.place(x=348, y=current_y) button["command"] = self.destroy # noinspection PyUnusedLocal def _init_context(self, record): if isinstance(record, RecordOfDrawLots): self.record = record self.order.set(record.order) self.event_selector.set(record.event) self.character_selector.set(record.character) self.cost_selector.set(record.cost) self.date_time.set(record.date_time) else: raise TypeError('In RecordWindow, arg: \"record\"') # 合法的選擇情況下才繼續進行,否則彈出錯誤視窗 def submitting(self): if self.event_selector.get() is None: tkMessageBox.showwarning("Event haven't selected", '\"Event\" 未選\n', parent=self) if self.character_selector.get() is None: tkMessageBox.showwarning("Character haven't selected", '\"Character\" 未選\n', parent=self) else: self.record.order = self.order.get() self.record.event = self.event_selector.get() self.record.character = self.character_selector.get() self.record.cost = self.cost_selector.get() self.record.date_time = self.date_time.get() self._post_submitting() # Template method def _post_submitting(self): pass
class RecordWindow(BasicWindow): def __init__(self, master, record, events, callback, width=445, height=133, **kwargs): BasicWindow.__init__(self, master, width=width, height=height, **kwargs) self.callback = callback self._init_widgets(events) self._init_context(record) # 註冊 Enter 確認送出 self.bind('<Return>', lambda event: self.submitting()) # 註冊編輯 DateTime 熱鍵 self.bind( '<Control-d>', lambda event: (self.date_time_entry.focus_set(), self.date_time_entry.selection_range(0, END))) def _init_widgets(self, events): # 筆數 current_y = 15 Label(self, text='Order', width=6, font=("", 12)).place(x=4, y=current_y) self.order = IntVar() # 下一次的筆數 Label(self, textvariable=self.order, width=6, font=("", 12)).place(x=4, y=current_y + 27) # 酒廠 Label(self, text='Event', width=14, font=("", 12)).place(x=57, y=current_y) self.event_selector = ObjectCombobox(self, setter=lambda obj: obj.name, width=14, justify=CENTER) self.event_selector.set_objects(events) self.event_selector.place(x=64, y=current_y + 27) # 角色 self.character_selector = CharacterSelectorCanvas(self) self.character_selector.place(x=201, y=current_y - 4) # 花費 Label(self, text='Cost', width=9, font=("", 12)).place(x=338, y=current_y) self.cost_selector = ttk.Combobox(self, state='readonly', width=8, justify=CENTER) self.cost_selector['values'] = DRAW_LOTS_COST self.cost_selector.place(x=346, y=current_y + 27) # 時間欄位,送交、取消並關閉的按鈕 current_y = 90 self.date_time = StringVar() self.date_time_entry = Entry(self, textvariable=self.date_time, width=11, font=(SCP, 10), justify=CENTER) self.date_time_entry.place(x=14, y=current_y + 5) button = Button(self, text="送出此記錄", width=30, borderwidth=3) button.place(x=117, y=current_y) button["command"] = self.submitting button = Button(self, text="關閉視窗", width=10, borderwidth=3) button.place(x=348, y=current_y) button["command"] = self.destroy # noinspection PyUnusedLocal def _init_context(self, record): if isinstance(record, RecordOfDrawLots): self.record = record self.order.set(record.order) self.event_selector.set(record.event) self.character_selector.set(record.character) self.cost_selector.set(record.cost) self.date_time.set(record.date_time) else: raise TypeError('In RecordWindow, arg: \"record\"') # 合法的選擇情況下才繼續進行,否則彈出錯誤視窗 def submitting(self): if self.event_selector.get() is None: tkMessageBox.showwarning("Event haven't selected", '\"Event\" 未選\n', parent=self) if self.character_selector.get() is None: tkMessageBox.showwarning("Character haven't selected", '\"Character\" 未選\n', parent=self) else: self.record.order = self.order.get() self.record.event = self.event_selector.get() self.record.character = self.character_selector.get() self.record.cost = self.cost_selector.get() self.record.date_time = self.date_time.get() self._post_submitting() # Template method def _post_submitting(self): pass