def select_start_options(self): ''' popup box to select side and difficulty levels ''' print 'select game start options' popup = Toplevel(self.gui, width=300, height=110) popup.title('Choose Game Side and Level') # stays on top of the game canvass popup.transient(self.gui) popup.grab_set() # bind window close events popup.bind('<Escape>', lambda e: self.not_selected_start_options(popup)) popup.protocol("WM_DELETE_WINDOW", lambda : self.not_selected_start_options(popup)) # choose side label1 = Label(popup, text="Side", height=30, width=50) label1.place(x=10, y=5, height=30, width=50) val1 = IntVar() bt_north = Radiobutton(popup, text="White", variable=val1, value=1) bt_north.place(x=60, y=10) bt_south = Radiobutton(popup, text="Black", variable=val1, value=2) bt_south.place(x=120, y=10) # by default, human plays first, meaning play the north side if self.choose_side == 'north': bt_north.select() else: bt_south.select() # choose difficulty level label2 = Label(popup, text="Level", height=30, width=50) label2.place(x=10, y=35, height=30, width=50) val2 = IntVar() bt_level1 = Radiobutton(popup, text="Dumb", variable=val2, value=1) bt_level1.place(x=60, y=40) bt_level2 = Radiobutton(popup, text="Smart", variable=val2, value=2) bt_level2.place(x=120, y=40) bt_level3 = Radiobutton(popup, text="Genius", variable=val2, value=3) bt_level3.place(x=180, y=40) # by default, the game is medium level if self.choose_level == 1: bt_level1.select() elif self.choose_level == 2: bt_level2.select() elif self.choose_level == 3: bt_level3.select() button = Button(popup, text='SET', \ command=lambda: self.selected_start_options(popup, val1, val2)) button.place(x=70, y=70)
def error_popup(text): win = Toplevel() Button(win, text='OK', command=win.destroy).pack(side=BOTTOM) Label(win, text=text, anchor=W, justify=LEFT).pack(side=LEFT) # Refuse to let the user do anything until window is dismissed win.focus_set() win.grab_set() win.wait_window()
class LBChoice(object): '''This is a listbox for returning projects to be unarchived.''' def __init__(self, list_=None, master=None, title=None): '''Must have master, title is optional, li is too.''' self.master = master if self.master is not None: self.top = Toplevel(self.master) else: return self.v = None if list_ is None or not isinstance(list_, list): self.list = [] else: self.list = list_[:] self.top.transient(self.master) self.top.grab_set() self.top.bind("<Return>", self._choose) self.top.bind("<Escape>", self._cancel) if title: self.top.title(title) lf = Frame(self.top) #Sets up the list. lf.pack(side=TOP) scroll_bar = Scrollbar(lf) scroll_bar.pack(side=RIGHT, fill=Y) self.lb = Listbox(lf, selectmode=SINGLE) self.lb.pack(side=LEFT, fill=Y) scroll_bar.config(command=self.lb.yview) self.lb.config(yscrollcommand=scroll_bar.set) self.list.sort() for item in self.list: self.lb.insert(END, item) #Inserts items into the list. bf = Frame(self.top) bf.pack(side=BOTTOM) Button(bf, text="Select", command=self._choose).pack(side=LEFT) Button(bf, text="New", command=self._new).pack(side=LEFT) Button(bf, text="Cancel", command=self._cancel).pack(side=LEFT) def _choose(self, event=None): try: first = self.lb.curselection()[0] self.v = self.list[int(first)] except IndexError: self.v = None self.top.destroy() def _new(self, event=None): self.v = "NEW" self.top.destroy() def _cancel(self, event=None): self.top.destroy() def return_value(self): self.master.wait_window(self.top) return self.v
def make_error_dialog(player_dlg): error_dlg = Toplevel(master=player_dlg); error_dlg.title( "Error" ); error_dlg.grab_set(); error_msg = Message(error_dlg, aspect=300, text="Player count must be between %d and %d" % (MIN_PLAYER_COUNT, MAX_PLAYER_COUNT) ) error_msg.pack(); error_button = Button(error_dlg, text="OK", \ command=error_dlg.destroy); error_button.pack(); error_dlg.update(); return
def _edit_remarks(self): bnk = self.synth.bank() name = bnk.name filename = bnk.filename remarks = bnk.remarks dialog = Toplevel(self) frame = factory.frame(dialog, True) frame.pack(expand=True, fill="both") lab_title = factory.center_label(frame, "Bank Info") lab_name = factory.label(frame, "Bank name : '%s'" % name) lab_filename = factory.label(frame, "Filename : '%s'" % filename) frame_text = factory.label_frame(frame, "Remarks") lab_title.grid(row=0, column=0, columnspan=3,pady=12) lab_name.grid(row=1, column=0, sticky="w", padx=4) lab_filename.grid(row=2, column=0, sticky="w", padx=4) frame_text.grid(row=3, column=0, columnspan=3, padx=4, pady=8) text_widget = factory.text_widget(frame_text, "Bank remarks") text_widget.insert('end', remarks) text_widget.config(width=80, height=20) vsb = factory.scrollbar(frame_text, orientation="vertical") hsb = factory.scrollbar(frame_text, orientation="horizontal") text_widget.grid(row=0, column=0, rowspan=8, columnspan=8, ipadx=4, ipady=4) vsb.grid(row=0, column=8, rowspan=8, columnspan=1, sticky="ns") hsb.grid(row=8, column=0, rowspan=1, columnspan=8, sticky="ew") vsb.config(command=text_widget.yview) hsb.config(command=text_widget.xview) text_widget.config(yscrollcommand=vsb.set) text_widget.config(xscrollcommand=hsb.set) frame_toolbar = factory.frame(frame, True) frame_toolbar.grid(row=4, column=0, padx=4, pady=8) def clear(): text_widget.delete(1.0, 'end') def accept(): rem = text_widget.get(1.0, 'end') bnk.remarks = rem self.status("Bank remarks updated") dialog.destroy() def cancel(): self.status("Change bank remarks canceld") dialog.destroy() b_clear = factory.clear_button(frame_toolbar, command=clear, ttip="Clear remarks") b_accept = factory.accept_button(frame_toolbar, command=accept) b_cancel = factory.cancel_button(frame_toolbar, command=cancel) b_clear.grid(row=0, column=0, padx=4, pady=8) b_accept.grid(row=0, column=1) b_cancel.grid(row=0, column=2) dialog.grab_set() dialog.mainloop()
def getDlg(root, title): """Create a dialog Arguments root -- dialog parent title -- dialog title """ dlg = Toplevel(root) dlg.title(title) dlg.root = root dlg.grab_set() dlg.transient(root) dlg.resizable(False, False) return dlg
def _fill_performance(self): bnk = self.synth.bank() dialog = Toplevel(self) frame = factory.frame(dialog, True) frame.pack(expand=True, fill="both") lab_title = factory.label(frame, "Fill Performance", modal=True) lab_start = factory.label(frame, "Starting slot", modal=True) lab_end = factory.label(frame, "Ending slot", modal=True) var_start = StringVar() var_end = StringVar() spin_start = factory.int_spinbox(frame, var_start, 0, len(bnk)) spin_end = factory.int_spinbox(frame, var_end, 0, len(bnk)) var_start.set(bnk.current_slot) var_end.set(bnk.current_slot+1) lab_title.grid(row=0, column=0, columnspan=3, padx=4, pady=8) lab_start.grid(row=1, column=0, sticky="w", padx=4) spin_start.grid(row=1, column=1, columnspan=2, padx=4) lab_end.grid(row=2, column=0, sticky="w", padx=4) spin_end.grid(row=2, column=1, columnspan=2, padx=4) def accept(): try: a,b = int(var_start.get()), int(var_end.get()) bnk.fill_performance(a,b) msg = "Performance filled slots [%3d, %3d]" % (a,b) self.status(msg) dialog.destroy() except ValueError: msg = "Invalid slot number" self.warning(msg) except KeyError as err: self.warning(err.message) def cancel(): msg = "Performance fill canceld" self.status(msg) dialog.destroy() b_accept = factory.accept_button(frame, command=accept) b_cancel = factory.cancel_button(frame, command=cancel) b_accept.grid(row=3, column=1, padx=4, pady=8,sticky="ew") b_cancel.grid(row=3, column=2, padx=4, pady=8,sticky="ew") dialog.grab_set() dialog.mainloop()
def grab_set(self, timeout=30): maxtime = time.time() + timeout while time.time() < maxtime: try: # Fails at least on Linux if mouse is hold down. return Toplevel.grab_set(self) except TclError: pass raise RuntimeError('Failed to open dialog in %s seconds. One possible ' 'reason is holding down mouse button.' % timeout)
class Reminder_Window(): def start_window(self): self.reminder_window = Toplevel() self.reminder_window.grab_set() self.reminder_window.title('Reminder') self.reminder_window.geometry('400x200') big_font = tkFont.Font(size=10) self.reminder_text_1 = Tkinter.Label(self.reminder_window, text='Remind me', font=big_font) self.reminder_text_2 = Tkinter.Label(self.reminder_window, \ text='day(s) before.', font=big_font) self.reminder_entry = Tkinter.Entry(self.reminder_window, width=3) self.ok_reminder_button = Tkinter.Button(self.reminder_window, text='OK', command=self.on_ok_button_press) self.back_reminder_button = Tkinter.Button(self.reminder_window, \ text='Back', command=self.on_back_button_press) self.reminder_text_1.place(x=x_reminder_text_1_location, \ y=y_reminder_texts_location) self.reminder_text_2.place(x=x_reminder_text_2_location, \ y=y_reminder_texts_location) self.reminder_entry.place(x=x_reminder_entry_location, \ y=y_reminder_entry_location) self.ok_reminder_button.place(x=x_ok_reminder_button_location, \ y=y_ok_back_reminder_button_locations) self.back_reminder_button.place(x=x_back_reminder_button_location, \ y=y_ok_back_reminder_button_locations) self.reminder_window.mainloop() def on_ok_button_press(self): entry_reminder_value = self.reminder_entry.get() try: int_entry_reminder_value = int(entry_reminder_value) #print 0 > int_entry_reminder_value, int_entry_reminder_value < 50 if 0 > int_entry_reminder_value or int_entry_reminder_value > 50: print 'hi' tkMessageBox.showinfo("Error", \ 'Invalid Entry. Please enter a number from 0-50') self.reminder_window.grab_set() self.reminder_window.lift() else: self.num_of_days_before_to_remind_int = int_entry_reminder_value self.reminder_window.destroy() except ValueError: tkMessageBox.showinfo("Error", \ 'Invalid Entry. Please enter a number from 0-50') self.reminder_window.grab_set() self.reminder_window.lift() def on_back_button_press(self): self.num_of_days_before_to_remind_int = 0 self.reminder_window.destroy()
def maketoplevel(root, modal=False): """ Make a toplevel window children of root. :param root: the main window :param modal: if the chield window as to be modal :returns: the child window """ tl = Toplevel(root) try: root.tk.call( 'wm', 'iconphoto', root._w, PhotoImage(file=os.path.join( os.path.dirname(os.path.realpath(__file__)), 'pwrsup.png'))) except: print('It is not possible to load the application icon') if modal: tl.grab_set() tl.focus_force() return tl
class Dialog: def __init__(self, master, title, class_=None, relx=0.5, rely=0.3): self.master = master self.title = title self.class_ = class_ self.relx = relx self.rely = rely def setup(self): if self.class_: self.root = Toplevel(self.master, class_=self.class_) else: self.root = Toplevel(self.master) self.root.title(self.title) self.root.iconname(self.title) def change_title(self,title): self.title = title self.root.title(self.title) self.root.iconname(self.title) def enable(self): ### enable self.root.protocol('WM_DELETE_WINDOW', self.wm_delete_window) self._set_transient(self.relx, self.rely) self.root.wait_visibility() self.root.grab_set() self.root.mainloop() self.root.destroy() def _set_transient(self, relx=0.5, rely=0.3): widget = self.root widget.withdraw() # Remain invisible while we figure out the geometry widget.transient(self.master) widget.update_idletasks() # Actualize geometry information if self.master.winfo_ismapped(): m_width = self.master.winfo_width() m_height = self.master.winfo_height() m_x = self.master.winfo_rootx() m_y = self.master.winfo_rooty() else: m_width = self.master.winfo_screenwidth() m_height = self.master.winfo_screenheight() m_x = m_y = 0 w_width = widget.winfo_reqwidth() w_height = widget.winfo_reqheight() x = m_x + (m_width - w_width) * relx y = m_y + (m_height - w_height) * rely if x+w_width > self.master.winfo_screenwidth(): x = self.master.winfo_screenwidth() - w_width elif x < 0: x = 0 if y+w_height > self.master.winfo_screenheight(): y = self.master.winfo_screenheight() - w_height elif y < 0: y = 0 widget.geometry("+%d+%d" % (x, y)) widget.deiconify() # Become visible at the desired location def wm_delete_window(self): self.root.quit()
def help_about(self): """Shows an 'about' modal dialog. Callback method called by tk. """ about_win = Toplevel(self.root) # Set up dialog lbl = Label(about_win, text="Video Poker") lbl.grid(row=0, column=0, padx=10, pady=(10, 0), sticky=W + N) lbl = Label(about_win, text="by Paul Griffiths") lbl.grid(row=1, column=0, padx=10, pady=(0, 7), sticky=W + N) lbl = Label(about_win, text="Written in Python, with tkinter.") lbl.grid(row=2, column=0, padx=10, pady=7, sticky=W + N) lbl = Label(about_win, text="Copyright 2013 Paul Griffiths") lbl.grid(row=4, column=0, padx=10, pady=(7, 0), sticky=W + N) lbl = Label(about_win, text="Email: [email protected]") lbl.grid(row=5, column=0, padx=10, pady=(0, 21), sticky=W + N) lbl = Label(about_win, text="This program is free software: you can " + "redistribute it and/or modify it under the terms") lbl.grid(row=6, column=0, columnspan=2, padx=10, pady=0, sticky=W + N) lbl = Label(about_win, text="of the GNU General Public License as " + "published by the Free Software Foundation, either") lbl.grid(row=7, column=0, columnspan=2, padx=10, pady=(0, 0), sticky=W + N) lbl = Label(about_win, text="version 3 of the License, or " + "(at your option) any later version.") lbl.grid(row=8, column=0, columnspan=2, padx=10, pady=(0, 21), sticky=W + N) lbl = Label(about_win, text="This program is distributed in " + "the hope that it will be useful, but WITHOUT ANY WARRANTY;") lbl.grid(row=9, column=0, columnspan=2, padx=10, pady=0, sticky=W + N) lbl = Label(about_win, text="without even the implied " + "warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR") lbl.grid(row=10, column=0, columnspan=2, padx=10, pady=(0, 0), sticky=W + N) lbl = Label(about_win, text="PURPOSE. See the " + "GNU General Public License for more details.") lbl.grid(row=11, column=0, columnspan=2, padx=10, pady=(0, 21), sticky=W + N) lbl = Label(about_win, text="You should have received a " + "copy of the GNU General Public License along with this") lbl.grid(row=12, column=0, columnspan=2, padx=10, pady=(0, 0), sticky=W + N) lbl = Label(about_win, text="program. If not, see " + "<http://www.gnu.org/licenses/>.") lbl.grid(row=13, column=0, columnspan=2, padx=10, pady=(0, 21), sticky=W + N) img = PhotoImage(file="{0}27.gif".format(self.gifdir)) lbl = Label(about_win, image=img) lbl.grid(row=0, column=1, rowspan=5, padx=10, pady=10, sticky=N + E) btn = Button(about_win, text="OK", command=about_win.quit) btn.grid(row=14, column=0, columnspan=2, padx=0, pady=(0, 10), ipadx=30, ipady=3) # Show dialog about_win.transient(self.root) about_win.parent = self.root about_win.protocol("WM_DELETE_WINDOW", about_win.destroy) about_win.geometry("+{0}+{1}".format(self.root.winfo_rootx() + 50, self.root.winfo_rooty() + 50)) about_win.title("About Video Poker") about_win.focus_set() about_win.grab_set() about_win.mainloop() about_win.destroy()
def select_start_options(self): ''' popup box to select side and difficulty levels ''' print 'select game start options' popup = Toplevel(self.gui, width=300, height=110) popup.title('Choose Game Side and Level') # stays on top of the game canvass popup.transient(self.gui) popup.grab_set() # bind window close events popup.bind('<Escape>', lambda e: self.not_selected_start_options(popup)) popup.protocol("WM_DELETE_WINDOW", lambda: self.not_selected_start_options(popup)) # choose side label1 = Label(popup, text="Side", height=30, width=50) label1.place(x=10, y=5, height=30, width=50) val1 = IntVar() bt_north = Radiobutton(popup, text="White", variable=val1, value=1) bt_north.place(x=60, y=10) bt_south = Radiobutton(popup, text="Black", variable=val1, value=2) bt_south.place(x=120, y=10) # by default, human plays first, meaning play the north side if self.choose_side == 'north': bt_north.select() else: bt_south.select() # choose difficulty level label2 = Label(popup, text="Level", height=30, width=50) label2.place(x=10, y=35, height=30, width=50) val2 = IntVar() bt_level1 = Radiobutton(popup, text="Dumb", variable=val2, value=1) bt_level1.place(x=60, y=40) bt_level2 = Radiobutton(popup, text="Smart", variable=val2, value=2) bt_level2.place(x=120, y=40) bt_level3 = Radiobutton(popup, text="Genius", variable=val2, value=3) bt_level3.place(x=180, y=40) # by default, the game is medium level if self.choose_level == 1: bt_level1.select() elif self.choose_level == 2: bt_level2.select() elif self.choose_level == 3: bt_level3.select() button = Button(popup, text='SET', \ command=lambda: self.selected_start_options(popup, val1, val2)) button.place(x=70, y=70)
def _store_program(self): bnk = self.synth.bank() program = bnk[None] slot = bnk.current_slot var_name = StringVar() var_start = StringVar() var_name.set(program.name) var_start.set(slot) dialog = Toplevel() frame = factory.frame(dialog, True) frame.pack(expand=True, fill="both") lab_title = factory.label(frame, "Store Program", modal=True) lab_name = factory.label(frame, "Name", modal=True) lab_start = factory.label(frame, "Slot", modal=True) entry_name = factory.entry(frame, var_name, "Program name") spin_start = factory.int_spinbox(frame, var_start, 0, len(bnk), "Startng slot") frame_remarks = factory.label_frame(frame, "Remarks", True) text_remarks = factory.text_widget(frame_remarks, "Remarks text", modal=True) text_remarks.insert("end", program.remarks) vsb = factory.scrollbar(frame_remarks, orientation="vertical") hsb = factory.scrollbar(frame_remarks, orientation="horizontal") text_remarks.config(width=40, height=10) text_remarks.grid(row=0, column=0, rowspan=4, columnspan=4) vsb.grid(row=0, column=4, rowspan=4, sticky="ns") hsb.grid(row=4, column=0, columnspan=4, sticky="ew") vsb.config(command=text_remarks.yview) hsb.config(command=text_remarks.xview) text_remarks.config(yscrollcommand=vsb.set) text_remarks.config(xscrollcommand=hsb.set) lab_title.grid(row=0, column=0, columnspan=3, pady=8, padx=4) lab_name.grid(row=1, column=0, padx=4) entry_name.grid(row=1, column=1, columnspan=2) frame_remarks.grid(row=2, column=0, rowspan=4, columnspan=4, padx=4, pady=4) lab_start.grid(row=6, column=0, padx=4, sticky="w") spin_start.grid(row=6, column=1, columnspan=2, pady=4) b_accept = factory.accept_button(frame) b_cancel = factory.cancel_button(frame) b_accept.grid(row=8, column=1, pady=8, sticky="ew") b_cancel.grid(row=8, column=2, pady=8, sticky="ew") def accept(): try: a = int(var_start.get()) name = var_name.get() remarks = text_remarks.get(1.0, "end") program.name = name program.remarks = remarks bnk[a] = program msg = "Stored program '%s' to slots [%3d]" % (name, a) self.status(msg) dialog.destroy() self.sync() except ValueError: msg = "Invalid slot number" self.warning(msg) def cancel(): msg = "Store program canceld" self.status(msg) dialog.destroy() b_accept.config(command=accept) b_cancel.config(command=cancel) dialog.grab_set() dialog.mainloop()
def help_about(self): """Shows an 'about' modal dialog. Callback method called by tk. """ about_win = Toplevel(self.root) # Set up dialog lbl = Label(about_win, text="Video Poker") lbl.grid(row=0, column=0, padx=10, pady=(10, 0), sticky=W + N) lbl = Label(about_win, text="by Charles Raymond Smith") lbl.grid(row=1, column=0, padx=10, pady=(0, 7), sticky=W + N) lbl = Label(about_win, text="Adapted from video poker by Paul Griffiths") lbl.grid(row=2, column=0, padx=10, pady=(0, 7), sticky=W + N) lbl = Label(about_win, text="Written in Python, with tkinter.") lbl.grid(row=3, column=0, padx=10, pady=7, sticky=W + N) lbl = Label(about_win, text="Copyright 2017 Charles Raymond Smith") lbl.grid(row=4, column=0, padx=10, pady=(7, 0), sticky=W + N) lbl = Label(about_win, text="Email: [email protected]") lbl.grid(row=5, column=0, padx=10, pady=(0, 21), sticky=W + N) lbl = Label(about_win, text="This program is free software: you can " + "redistribute it and/or modify it under the terms") lbl.grid(row=6, column=0, columnspan=2, padx=10, pady=0, sticky=W + N) lbl = Label(about_win, text="of the GNU General Public License as " + "published by the Free Software Foundation, either") lbl.grid(row=7, column=0, columnspan=2, padx=10, pady=(0, 0), sticky=W + N) lbl = Label(about_win, text="version 3 of the License, or " + "(at your option) any later version.") lbl.grid(row=8, column=0, columnspan=2, padx=10, pady=(0, 21), sticky=W + N) lbl = Label(about_win, text="This program is distributed in " + "the hope that it will be useful, but WITHOUT ANY WARRANTY;") lbl.grid(row=9, column=0, columnspan=2, padx=10, pady=0, sticky=W + N) lbl = Label(about_win, text="without even the implied " + "warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR") lbl.grid(row=10, column=0, columnspan=2, padx=10, pady=(0, 0), sticky=W + N) lbl = Label(about_win, text="PURPOSE. See the " + "GNU General Public License for more details.") lbl.grid(row=11, column=0, columnspan=2, padx=10, pady=(0, 21), sticky=W + N) lbl = Label(about_win, text="You should have received a " + "copy of the GNU General Public License along with this") lbl.grid(row=12, column=0, columnspan=2, padx=10, pady=(0, 0), sticky=W + N) lbl = Label(about_win, text="program. If not, see " + "<http://www.gnu.org/licenses/>.") lbl.grid(row=13, column=0, columnspan=2, padx=10, pady=(0, 21), sticky=W + N) img = PhotoImage(file="{0}27.gif".format(self.gifdir)) lbl = Label(about_win, image=img) lbl.grid(row=0, column=1, rowspan=5, padx=10, pady=10, sticky=N + E) btn = Button(about_win, text="OK", command=about_win.quit) btn.grid(row=14, column=0, columnspan=2, padx=0, pady=(0, 10), ipadx=30, ipady=3) # Show dialog about_win.transient(self.root) about_win.parent = self.root about_win.protocol("WM_DELETE_WINDOW", about_win.destroy) about_win.geometry("+{0}+{1}".format(self.root.winfo_rootx() + 50, self.root.winfo_rooty() + 50)) about_win.title("About Video Poker") about_win.focus_set() about_win.grab_set() about_win.mainloop() about_win.destroy()
def Delete_click(root, Listbox): if (Listbox.curselection() != ()): root.grab_release() print("Delete click") popup = Toplevel() popup.resizable(False, False) popup.geometry("200x100+700+300") popup.grab_set() def Cancle(): popup.grab_release() root.grab_set() popup.destroy() def OK(Listbox): print('feature_support.OK_click') newrow = [] selected = Listbox.get(ACTIVE) os.remove("./data/%s.mp3" % selected.split(' ----- ')[1]) for line in fileinput.input("./data/database.csv", inplace=True): if line == '\n': continue if int(line[0]) < int(selected[0]): print line, if int(line[0]) > int(selected[0]): newline = line.split() newline[0] = str(int(newline[0]) - 1) print " ".join(newline) print '\n', fileinput.close() with open('./data/list_person.txt', 'rb') as lpfile: row_count = sum(1 for row in lpfile) os.remove('./model/net%d.xml' % int(selected[0])) if (row_count > 1) or (int(selected[0]) != row_count): for i in range(int(selected[0]) + 1, row_count + 1): os.rename('./model/net%d.xml' % i, './model/net%d.xml' % (i - 1)) with open('./data/list_person.txt', 'rb') as lpfile: for row in lpfile: if (row != []): row = row.split() if (int(row[0]) < int(selected[0])): newrow.append(row) if (int(row[0]) > int(selected[0])): row[0] = int(row[0]) - 1 newrow.append(row) Listbox.delete(0, END) with open('./data/list_person.txt', 'wb') as lpfile: i = 0 for row in newrow: Listbox.insert(i, "%d ----- %s" % (int(row[0]), row[1])) lpfile.write("%s %s\n" % (row[0], row[1])) i += 1 NeuralNetwork.remove_model(int(selected[0])) popup.destroy() root.grab_set() popup.wm_title("Delete") l1 = Label(popup, text="Bạn có muốn xóa !") b1 = Button(popup, text="OK", width=7, command=lambda: OK(Listbox)) b2 = Button(popup, text="Cancle", width=7, command=Cancle) l1.place(relx=0.25, rely=0.2) b1.place(relx=0.18, rely=0.6) b2.place(relx=0.52, rely=0.6) popup.mainloop() else: tkMessageBox.showinfo("Error", "Vui lòng chọn đối tượng")
class Docview: def __init__(self, master, fn, **kwargs): self.file = fn self.widget = None self.text = Text() self.frame = master self.location = kwargs.get('location', None) self.wait = kwargs.get('wait', None) self.find = kwargs.get('find', None) self.delete_img = PhotoImage(file='delete.pbm') self.up_img = PhotoImage(file='1uparrow.pbm') self.down_img = PhotoImage(file='1downarrow.pbm') self.upbutn = Button() self.dnbutn = Button() self.deletebutn = Button() self.entry = None self.doc = '' def Search(self, pattern): ''' normal top-down search :param pattern: :return: ''' try: self.text.tag_remove('hilight', '1.0', 'end') ind = self.text.search(pattern, '1.0', stopindex="end", nocase=True) self.text.mark_set("insert", ind) self.text.see("insert") nchar = len(pattern) self.text.tag_add('hilight', ind, ind + "+{}c".format(nchar)) except: pass def RecursiveSearch(self, pattern, upward=False): ''' Search forward from current position. Search backward if upward is True. :param pattern: search pattern :param upward: reverse search if true :return: Null ''' if len(pattern) == 0: ind = '1.0' if upward else 'end' self.text.mark_set("insert", ind) self.text.see("insert") return try: insert = self.text.index("insert") if upward: point = insert + "-1c" ind = self.text.search(pattern, point, stopindex="1.0", backwards=True, nocase=True) else: point = insert + "+1c" ind = self.text.search(pattern, point, stopindex="end", nocase=True) self.text.mark_set("insert", ind) self.text.see("insert") self.text.tag_remove('hilight', '1.0', 'end') nchar = len(pattern) self.text.tag_add('hilight', ind, ind + "+{}c".format(nchar)) self.text.update() except: pass def SearchUp(self): pattern = str(self.entry.get()) self.RecursiveSearch(pattern, True) def SearchDn(self): pattern = str(self.entry.get()) self.RecursiveSearch(pattern, False) def FindEntry(self, event): '''triggered by keyrelease event in find entry box''' pattern = str(self.entry.get()) nchar = len(pattern) self.text.tag_remove('hilight', '1.0', 'end') if nchar == 0: return try: ind = self.text.search(pattern, "1.0", stopindex="end", nocase=True) self.text.mark_set("insert", ind) self.text.see("insert") self.text.tag_add('hilight', ind, ind + "+{}c".format(nchar)) self.text.update() except: pass def DeleteSearch(self): self.entry.delete(0, 'end') self.text.tag_remove('hilight', '1.0', 'end') def Popup(self): if not self.doc: with open(self.file, 'r') as fh: self.doc = fh.read() if self.widget: # widget already open if self.frame: self.widget.lift(aboveThis=self.frame) return #print 'length of doc ', len(self.doc) self.widget = Toplevel() if self.find: self.sframe = Frame(self.widget) self.sframe.pack() self.upbutn = Button(self.sframe, width=17, command=self.SearchUp, image=self.up_img) self.upbutn.pack(side='left') self.dnbutn = Button(self.sframe, width=17, command=self.SearchDn, image=self.down_img) self.dnbutn.pack(side='left') self.entry = Entry(self.sframe, width=50) self.entry.bind('<KeyRelease>', self.FindEntry) self.entry.pack(side='left') self.deletebutn = Button(self.sframe, width=17, command=self.DeleteSearch) self.deletebutn.config(image=self.delete_img) self.deletebutn.pack(side='left') width = max([len(line) for line in self.doc.split('\n')]) height = min([self.doc.count('\n') + 1, 40]) self.text = Text(self.widget, width=width, height=height) self.text.tag = self.text.tag_configure('hilight', background='#ffff00') self.text.insert("1.0", self.doc) self.text.pack() if self.location and self.frame: dx, dy = self.location w = self.text.winfo_width() h = self.text.winfo_height() x = self.frame.winfo_x() y = self.frame.winfo_y() loc = "%dx%d+%d+%d" % (600, 400, x + dx, y + dy) self.widget.geometry(loc) if self.wait: self.widget.focus_set() self.widget.grab_set() if self.frame: self.widget.transient(master=self.frame) self.widget.wait_window(self.widget) if self.frame: self.widget.lift(aboveThis=self.frame) self.widget.protocol("WM_DELETE_WINDOW", self.Kill) def Kill(self): self.widget.destroy() self.widget = None
class AboutPopUp(): ''' there is a lot of work to do here also, but is a quite good and functional starting point... first put as child of Toplevel then change to grid ''' def __init__(self, **kwargs): ''' (under development)''' master = None title = 'AboutPopUp' licence = None if 'master' in kwargs.keys(): master = kwargs['master'] if 'title' in kwargs.keys(): title = kwargs['title'] if 'licence' in kwargs.keys(): licence = kwargs['licence'] self.im_smlogo = PhotoImage(file="./lib/gui/img/small_logo2.ppm") self.im_logo2 = PhotoImage(file="./lib/gui/img/logo2.ppm") self.master = master self._title_ = title self._licence_ = licence self.set_self_vertex() self.create_content() def set_self_vertex(self): ws, hs, w_main, h_main, x_main, y_main = self.master.MAINVERTEX # calculate the greatness w_pop = w_main h_pop = h_main * 14 / 21 x_pop = x_main + w_main + 30 y_pop = y_main + h_main - h_pop - 140 #print w_pop, h_pop, x_pop, y_pop self._vertex_ = [w_pop, h_pop, x_pop, y_pop] def create_content(self): self.pop = Toplevel(self.master, bg="white") self.pop.grab_set() # when you show the popup self.pop.wm_title(' ' * 5 + self._title_) self.pop.geometry('{:d}x{:d}+{:d}+{:d}'.format(*self._vertex_)) leftcolumn = Frame(self.pop, bg="white") Label(leftcolumn, bg="white").pack(side="top", fill="both", pady=30) Label(leftcolumn, bg="white", image=self.im_logo2).pack(side="top", fill="both", padx=10) #side= LEFT, leftcolumn.pack(side="left", fill='both', padx=1) rightcolumn = Frame(self.pop, bg="white") firstrow = Frame(rightcolumn, bg="white") Frame(rightcolumn, bg="white").pack(side="top", pady=10, padx=0) Label(firstrow, text="GROTOLAM", fg="Gray13", bg="white", font="Verdana 13 bold").pack(side="left", pady=20) Label(firstrow, text='', bg="white").pack(side="left", padx=40) firstrow.pack(side="top", padx=0) secrow = Frame(rightcolumn, bg="white") Label(secrow, text="v " + __version__.split()[2], fg="Gray13", bg="white", font="Verdana 10").pack(side="left") Label(secrow, text='', bg="white").pack(side="left", padx=75) secrow.pack(side="top", padx=0) # lets create space to do some stuff ... Frame(rightcolumn, bg="white").pack(side="top", pady=20, padx=0) thirdrow = Frame(rightcolumn, bg="white") Label(thirdrow, text="2018 Python version by", fg="Gray13", bg="white", font="Verdana 10").pack(side="left") Label(thirdrow, text='', bg="white").pack(side="left", padx=16) thirdrow.pack(side="top", padx=0) fourthrow = Frame(rightcolumn, bg="white") Label(fourthrow, text="Hernan Chavez Thielemann", fg="Gray13", bg="white", font="Verdana 10").pack(side="left") Label(fourthrow, text='', bg="white").pack(side="left", padx=1) fourthrow.pack(side="top", padx=0) fifthrow = Frame(rightcolumn, bg="white") Label(fifthrow, bg="white", image=self.im_smlogo).pack(side="left", fill="both", padx=10) fifthrow.pack(side="top", padx=0) sixthrow = Frame(rightcolumn, bg="white") href = Label(sixthrow, bg="white", font="Verdana 10", text="Small web page", fg="blue", cursor="hand2") f = Font(href, href.cget("font")) f.configure(underline=True) href.configure(font=f) href.pack(side="left") href.bind("<Button-1>", self.callback) Label(sixthrow, text='', bg="white").pack(side="left", padx=40) sixthrow.pack(side="top", padx=0) lastrow = Frame(rightcolumn, bg="white") self.bottom_button_row(lastrow) rightcolumn.pack(side="right", fill='both', padx=5) def callback(self, event): open_new(r"http://www.polito.it/small") def bottom_button_row(self, _row_): b2 = Button(_row_, text='Close', bg="white", command=self.exit_pop) b2.pack(side="right", padx=10, pady=4) b1 = Button(_row_, text='Licence', bg="white", command=self._licence_) b1.pack(side="right", padx=10, pady=20) _row_.pack(side="bottom") def openlicence(self): print 'opening licence file' def exit_pop(self): self.pop.grab_release() # to return to normal self.pop.destroy()
class PromptPopUp_old(): '''the future description: "Neat & tidy prompt pop up to request input" there is a lot of work to do here : make it class clean functions to make it generic add extra parameters such as: buttons title dimensions* >but is a functional starting point< ''' def __init__(self, **kwargs): ''' (under development)''' master = None briefing = '' entries_txt = [] entries_val = [] title = 'PromptPopUp' if 'master' in kwargs.keys(): master = kwargs['master'] if 'briefing' in kwargs.keys(): briefing = kwargs['briefing'] if 'entries_txt' in kwargs.keys(): entries_txt = kwargs['entries_txt'] if 'entries_val' in kwargs.keys(): entries_val = kwargs['entries_val'] if 'title' in kwargs.keys(): title = kwargs['title'] self.master = master self._briefing_ = briefing self._entries_ = entries_txt self._defvals_ = entries_val self._title_ = title self.ent_c = [] self.set_self_vertex() self.create_content() def set_self_vertex(self): from main_gui import MAINVERTEX ws, hs, w_main, h_main, x_main, y_main = MAINVERTEX # calculate the greatness self.entr_maxlen = int(len(max(self._entries_, key=len)) * 2.25 / 3.0) w_pop = w_main - 40 h_pop = h_main * 12 / 21 x_pop = x_main + w_main - 30 y_pop = y_main + h_main - h_pop #print w_pop, h_pop, x_pop, y_pop self._vertex_ = [w_pop, h_pop, x_pop, y_pop] def create_content(self): self.pop = Toplevel(self.master) self.pop.grab_set() # when you show the popup self.pop.wm_title(' ' * 20 + self._title_) self.pop.geometry('{:d}x{:d}+{:d}+{:d}'.format(*self._vertex_)) label0 = Label(self.pop, text=self._briefing_) label0.pack(side="top", fill="both", expand=True, padx=100, pady=20) # just a line bottom_hline_deco(self.pop) # lets create space to do some stuff ... row2fill = Frame(self.pop) for e in range(len(self._entries_)): self.ent_c.append( create_entry(row2fill, self._entries_[e], self._defvals_[e], self.entr_maxlen)) row2fill.pack(side="top", padx=1, pady=5) self.bottom_button_row() self.master.solv_b.config(bg='gray40', width=45) #cyan') #self.master.solv_b.flash() #self.pop.mainloop() def bottom_button_row(self): _br_ = Frame(self.pop) b1 = Button(_br_, text='Save', command=(lambda: self.save_it())) b1.pack(side="right", padx=10, pady=20) b2 = Button(_br_, text='Quit', command=(lambda: self.exit_pop())) b2.pack(side="right", padx=10, pady=4) _br_.pack(side="bottom", expand=True) def save_it(self): self.master._solvatedinfo_ = get_entriesvalue(self.ent_c) self.exit_pop() def exit_pop(self): self.pop.grab_release() # to return to normal self.master.solv_b.config(bg='lightgrey', width=29) self.pop.destroy()
def do_a_turn(self): # roll die die1_val = random.randint(1,6) die2_val = random.randint(1,6) # TODO: potentially simulate die motion like in matlab version # change die values on screen self.dice1_strvar.set(str(die1_val)) self.dice2_strvar.set(str(die2_val)) # check dice conditions ethan_val = int(self.ethan_strvar.get()) player_val = int(self.player_strvars[self.player_turn].get()) if (die1_val+die2_val == 4): # player gets ethan's stuff player_val = player_val + ethan_val ethan_val = 0 elif (die1_val+die2_val == 2) and self.ethan_eyes: # player loses it all to ethan ethan_val = player_val + ethan_val player_val = 0 else: # player loses one chip to ethan ethan_val = ethan_val + 1 player_val = player_val - 1 self.ethan_strvar.set(str(ethan_val)) self.player_strvars[self.player_turn].set(str(player_val)) # check for the lose condition total_chips = 0 num_players_positive = 0 for x in self.player_strvars: if int(x.get()) > 0: num_players_positive = num_players_positive + 1 total_chips = total_chips + int(x.get()) if total_chips == 0: # everybody loses error_dlg = Toplevel(master=self.main_window) error_dlg.geometry("%dx%d+%d+%d" % (INIT_WINDOW_WIDTH, INIT_WINDOW_HEIGHT, X_POS, Y_POS)) error_dlg.title( "LOSERS" ); error_dlg.grab_set(); error_msg = Message(error_dlg, aspect=300, text="EVERYBODY LOSES, AE2015") error_msg.pack(); error_button = Button(error_dlg, text="OK", \ command=lambda: self.destroy_all(error_dlg)); error_button.pack(); error_dlg.update(); elif (num_players_positive == 1) and (player_val > ethan_val): #win condition, only for player who just moved player_name = self.player_name_list[self.player_turn].get(); error_dlg = Toplevel(master=self.main_window) error_dlg.geometry("%dx%d+%d+%d" % (INIT_WINDOW_WIDTH, INIT_WINDOW_HEIGHT, X_POS, Y_POS)) error_dlg.title( "WINNER" ); error_dlg.grab_set(); error_msg = Message(error_dlg, aspect=300, text="GOOD JOB %s, YOU BEAT ETHAN" % (player_name) ) error_msg.pack(); error_button = Button(error_dlg, text="OK", \ command=error_dlg.destroy); error_button.pack(); error_dlg.update(); else: # game isn't over, increment turn to next positive player self.player_frame_list[self.player_turn].config(relief='flat', \ borderwidth=0) num_players = len(self.player_strvars) found_next = 0 self.current_turn = self.current_turn + 1 while (found_next == 0): self.player_turn = (self.player_turn + 1) % num_players if int(self.player_strvars[self.player_turn].get()) > 0: found_next = 1 self.player_frame_list[self.player_turn].config(relief='raised', \ borderwidth=2) return
class ListBoxChoice(object): def __init__(self, master=None, title=None, message=None, clist=[], newmessage=None): self.master = master self.value = None self.newmessage = newmessage self.list = clist[:] self.modalPane = Toplevel(self.master) self.modalPane.transient(self.master) self.modalPane.grab_set() self.modalPane.bind("<Return>", self._choose) self.modalPane.bind("<Escape>", self._cancel) if title: self.modalPane.title(title) if message: Label(self.modalPane, text=message).pack(padx=5, pady=5) listFrame = Frame(self.modalPane) listFrame.pack(side=TOP, padx=5, pady=5) scrollBar = Scrollbar(listFrame) scrollBar.pack(side=RIGHT, fill=Y) self.listBox = Listbox(listFrame, selectmode=SINGLE) self.listBox.pack(side=LEFT, fill=Y) scrollBar.config(command=self.listBox.yview) self.listBox.config(yscrollcommand=scrollBar.set) self.list.sort() for item in self.list: self.listBox.insert(END, item) if newmessage is not None: newFrame = Frame(self.modalPane) newFrame.pack(side=TOP, padx=5) Label(newFrame, text=newmessage).pack(padx=5, pady=5) self.entry = Entry(newFrame, width=30) self.entry.pack(side=TOP, padx=5) self.entry.bind("<Return>", self._choose_entry) buttonFrame = Frame(self.modalPane) buttonFrame.pack(side=BOTTOM) chooseButton = Button(buttonFrame, text="Choose", command=self._choose_entry) chooseButton.pack() cancelButton = Button(buttonFrame, text="Cancel", command=self._cancel) cancelButton.pack(side=RIGHT) def _choose_entry(self, event=None): if self.newmessage is None: self._choose() return v = self.entry.get().strip() if v == None or v == "": self._choose() return self.value = v self.modalPane.destroy() def _choose(self, event=None): try: firstIndex = self.listBox.curselection()[0] self.value = self.list[int(firstIndex)] except IndexError: self.value = None self.modalPane.destroy() def _cancel(self, event=None): self.modalPane.destroy() def returnValue(self): self.master.wait_window(self.modalPane) return self.value
def hiya(self): if not self.nand_mode: showinfo( 'Info', 'Now you will be asked to choose the SD card path that will be used ' 'for installing the custom firmware (or an output folder).\n\nIn order to avoid ' 'boot errors please assure it is empty before continuing.') self.sd_path = askdirectory() # Exit if no path was selected if self.sd_path == '': return # If adding a No$GBA footer, check if CID and ConsoleID values are OK elif self.nand_operation.get() == 2: cid = self.cid.get() console_id = self.console_id.get() # Check lengths if len(cid) != 32: showerror('Error', 'Bad eMMC CID') return elif len(console_id) != 16: showerror('Error', 'Bad Console ID') return # Parse strings to hex try: cid = cid.decode('hex') except TypeError: showerror('Error', 'Bad eMMC CID') return try: console_id = bytearray(reversed(console_id.decode('hex'))) except TypeError: showerror('Error', 'Bad Console ID') return dialog = Toplevel(self) # Open as dialog (parent disabled) dialog.grab_set() dialog.title('Status') # Disable maximizing dialog.resizable(0, 0) frame = Frame(dialog, bd=2, relief=SUNKEN) scrollbar = Scrollbar(frame) scrollbar.pack(side=RIGHT, fill=Y) self.log = ThreadSafeText(frame, bd=0, width=52, height=20, yscrollcommand=scrollbar.set) self.log.pack() scrollbar.config(command=self.log.yview) frame.pack() Button(dialog, text='Close', command=dialog.destroy, width=16).pack(pady=10) # Center in window dialog.update_idletasks() width = dialog.winfo_width() height = dialog.winfo_height() dialog.geometry( '%dx%d+%d+%d' % (width, height, root.winfo_x() + (root.winfo_width() / 2) - (width / 2), root.winfo_y() + (root.winfo_height() / 2) - (height / 2))) # Check if we'll be adding a No$GBA footer if self.nand_mode and self.nand_operation.get() == 2: Thread(target=self.add_footer, args=(cid, console_id)).start() else: Thread(target=self.check_nand).start()