class LoadStatsFrame(LabelFrame): def __init__(self, parent, set_stats): log.debug(f"creating {type(self).__name__}...") super().__init__(parent, text=" Load Stats ") self.parent = parent self.set_stats = set_stats Label(self, text="Pick stats file: ").grid(row=0, column=0, sticky=W) self.file_input = Entry(self, width=60, text="Not set!", state="readonly") self.file_input.grid(row=0, column=1, sticky=EW) Button(self, text="Browse", command=self._browse_for_stats).grid(row=0, column=2, sticky=E) Button(self, text="Use Bundled", command=self._use_bundled_stats).grid(row=0, column=3, sticky=E) for child in self.winfo_children(): child.grid_configure(padx=PAD_X, pady=PAD_Y, sticky=EW) def load_stats(self, file: str): self.file_input.configure(text=file) stats = StatsCollection.read_json(file) self.set_stats(stats) def _browse_for_stats(self): self.load_stats(askopenfilename()) def _use_bundled_stats(self): self.load_stats(str(Path(__file__).parent.joinpath("matches.json")))
class DateWidget(Frame): """Gets a date from the user.""" def __init__(self, master): """Make boxes, register callbacks etc.""" Frame.__init__(self, master) self.label = Label(self, text="När är du född?") self.label.pack() self.entry_text = StringVar() self.entry_text.trace("w", lambda *args: self.onEntryChanged()) self.entry = Entry(self, width=date_entry_width, textvariable=self.entry_text) self.entry.insert(0, "ÅÅÅÅ-MM-DD") self.entry.pack(pady=small_pad) self.button = Button(self, text="Uppdatera", command=lambda: self.onDateChanged()) self.button.pack() self.entry.focus_set() self.entry.select_range(0, END) self.entry.bind("<Return>", lambda x: self.onDateChanged()) def setListener(self, pred_view): """Select whom to notify when a new date is entered.""" self.pred_view = pred_view def onDateChanged(self): """Notifies the PredictionWidget that the date has been changed.""" try: date = datetime.datetime.strptime(self.entry.get(), "%Y-%m-%d").date() self.pred_view.update(date) except ValueError: self.entry.configure(foreground="red") def onEntryChanged(self): """Reset the text color.""" self.entry.configure(foreground="")
class Attribute(TwoCells): def __init__(self, parent, text, value, callback=None, **kwargs): super().__init__(parent, **kwargs) self.callback = callback self.label_text = StringVar() self.label_text.set(text) self.label = Label(self.frame, textvariable=self.label_text) self.label.grid(column=0, row=0, padx=5, pady=5, sticky=W) self.current_value = StringVar(self.frame) self.current_value.set(value) self.value = Entry(self.frame, textvariable=self.current_value, validate="key", validatecommand=self.validate_command) self.value.grid(column=1, row=0, padx=5, pady=5, sticky=E) if self.callback: self.value.bind("<KeyRelease>", self._on_entry_changed) def _on_entry_changed(self, event): self.callback() def hide(self): self.label.grid_remove() self.value.grid_remove() return self def show(self, text): self.label_text.set(text) self.label.grid() self.value.grid() return self def disable(self): self.value.configure(state=DISABLED) return self def enable(self): self.value.configure(state=NORMAL) return self def set(self, value): self.current_value.set(value) if str(value) == "": self.disable() else: self.enable() def get(self): value = self.current_value.get() if self.validation_type in [ TwoCells.INTEGERS, TwoCells.NON_NEGATIVE_INTEGERS ]: return int(value) if value not in ["", "-"] else 0 else: return value
def initHeader(self, frame1): self.master.title('Lab3 - 201902 - Grupo B') self.master.iconphoto(True, PhotoImage( file=os.path.abspath('./guindaste.png'))) Style().configure('TButton', padding=(0, 5, 0, 5), font='serif 10') labelTitle = Label( self, text='Guindaste', font='Helvetica 16 bold') labelTitle.grid(row=0, column=0, columnspan=3) labelState = Label(frame1, text='Estado') stateEntry = Entry(frame1, textvariable=self.stateVar) stateEntry.configure(state='readonly') labelState.grid(row=0, column=0) stateEntry.grid(row=0, column=1, columnspan=2, sticky=W+E)
def initElectromagnet(self, frame1): def turnOnElectromagnet(): self.craneState.turnOnElectromagnet(self.setEntries) def turnOffElectromagnet(): self.craneState.turnOffElectromagnet(self.setEntries) labelElectromagnet = Label(frame1, text='Eletroíma') electromagnetEntry = Entry( frame1, textvariable=self.electromagnetVar) self.btnTurnOnElectromagnet = Button( frame1, text='On', command=turnOnElectromagnet) self.btnTurnOffElectromagnet = Button( frame1, text='Off', command=turnOffElectromagnet) electromagnetEntry.configure(state='readonly') labelElectromagnet.grid(row=1, column=2) electromagnetEntry.grid(row=2, column=2) self.btnTurnOnElectromagnet.grid(row=3, column=2) self.btnTurnOffElectromagnet.grid(row=4, column=2)
TCombobox3 = Combobox(Frame3) TCombobox3.place(relx=0.11, rely=0.19, relheight=0.08, relwidth=0.6) TCombobox3.configure(textvariable=combobox2) TCombobox3.configure(width=173) TCombobox3.configure(takefocus="") TCombobox3['values'] = hashtags Radiobutton2 = Radiobutton(Frame3) Radiobutton2.place(relx=0.07, rely=0.3, relheight=0.09, relwidth=0.44) Radiobutton2.configure(text='''Multiple Hashtags''') Radiobutton2.configure(value="2") Radiobutton2.configure(variable=radio) Entry1 = Entry(Frame3) Entry1.place(relx=0.11, rely=0.42, relheight=0.08, relwidth=0.51) Entry1.configure(width=144) Button2 = Button(Frame3) Button2.place(relx=0.63, rely=0.42, height=20, width=20) Button2.configure(padding=(2, 0, 0, 0)) Button2.configure(text='''+''') Button3 = Button(Frame3) Button3.place(relx=0.74, rely=0.87, height=25, width=60) Button3.configure(padding=(2, 0, 0, 0)) Button3.configure(text='''Follow''') Button3.configure(command=follow) Button3.configure(width=56) Scale1 = Scale(Frame3, command=lambda s: struc1(s)) Scale1.place(relx=0.07, rely=0.59)
class Register(Frame): def __init__(self, master): super().__init__(master=master) self.layout_components() # Setup Callbacks self.show_sign_in: Callable = None self.sign_in: Callable = None self.search_email: Callable = None self.search_username: Callable = None self.search_password: Callable = None self.register: Callable = None self.username_valid: bool = False self.email_valid: bool = False self.password_valid: bool = False self.passcnfm_valid: bool = False # Refocus to Email Entry self.email_Entry.focus() def layout_components(self): self.pack(fill=tk.BOTH, expand=False, padx=PADX, pady=PADY) error_font = font.Font(family="Ariel", size=8) # Variables self.username = tk.StringVar() self.username.set("") self.email = tk.StringVar() self.email.set("") self.password = tk.StringVar() self.password.set("") self.passcnfm = tk.StringVar() self.passcnfm.set("") # Email Row email_Frame = Frame(self) email_Frame.pack(fill=tk.X) email_Label = Label(email_Frame, text="Email:", width=LABEL_WIDTH) email_Label.pack(side=tk.LEFT, padx=PADX, pady=PADY) self.email_Entry = Entry(email_Frame, width=ENTRY_WIDTH, textvariable=self.email) self.email_Entry.pack(fill=tk.X, padx=PADX, pady=PADY, expand=True) self.email_Entry.bind("<FocusOut>", self._validate_email) # Email Error Row email_errFrame = Frame(self) email_errFrame.pack(fill=tk.X) self.email_errLabel = Label(email_errFrame, text="", foreground="red", font=error_font) self.email_errLabel.pack(side=tk.LEFT, anchor="center", expand=True, padx=PADX, pady=PADY) # Username Row user_Frame = Frame(self) user_Frame.pack(fill=tk.X) user_Label = Label(user_Frame, text="Username:"******"<FocusOut>", self._validate_username) # Username Error Row user_errFrame = Frame(self) user_errFrame.pack(fill=tk.X) self.user_errLabel = Label(user_errFrame, text="", foreground="red", font=error_font) self.user_errLabel.pack(side=tk.LEFT, anchor="center", expand=True, padx=PADX, pady=PADY) # Original Password Row pass_Frame = Frame(self) pass_Frame.pack(fill=tk.X) pass_Label = Label(pass_Frame, text="Password:"******"*") self.pass_Entry.pack(fill=tk.X, padx=PADX, pady=PADY, expand=True) self.pass_Entry.bind("<FocusOut>", self._validate_password) # Confirming Password Row pass_cnfmFrame = Frame(self) pass_cnfmFrame.pack(fill=tk.X) pass_cnfmLabel = Label(pass_cnfmFrame, text="Confirm:", width=LABEL_WIDTH) pass_cnfmLabel.pack(side=tk.LEFT, padx=PADX, pady=PADY) self.pass_cnfmEntry = Entry(pass_cnfmFrame, width=ENTRY_WIDTH, textvariable=self.passcnfm, show="*") self.pass_cnfmEntry.pack(fill=tk.X, padx=PADX, pady=PADY, expand=True) self.pass_cnfmEntry.bind("<FocusOut>", self._validate_password) # Password Error Row pass_errFrame = Frame(self) pass_errFrame.pack(fill=tk.X) self.pass_errLabel = Label(pass_errFrame, text="", foreground="red", font=error_font) self.pass_errLabel.pack(side=tk.LEFT, anchor="center", expand=True, padx=PADX, pady=PADY) # Button Row button_Frame = Frame(self) button_Frame.pack(fill=tk.X) # Cancel Button cncl_Button = Button(button_Frame, text="Cancel", command=self.cancel) cncl_Button.pack(side=tk.RIGHT, padx=PADX, pady=PADY, expand=False) # Register Button self.register_Button = Button(button_Frame, text="Register", state="disabled", command=self._register) self.register_Button.pack(side=tk.RIGHT, padx=PADX, pady=PADY, expand=False) # View Password Button self.view_pass_Button = Button(button_Frame, text="View Password", command=self.view_password) self.view_pass_Button.pack(side=tk.LEFT, padx=PADX, pady=PADY) # Go Back Button Row gbck_Frame = Frame(self) gbck_Frame.pack(fill=tk.X) gbck_Label = Label(gbck_Frame, text="Have an Account? Go Ahead and ") gbck_Label.pack(side=tk.LEFT, padx=PADX, pady=PADY, expand=False) gbck_Button = Button(gbck_Frame, text="Sign In", command=self._show_sign_in) gbck_Button.pack(side=tk.RIGHT, padx=PADX, pady=PADY, expand=False) def cancel(self): self.email.set("") self.username.set("") self.password.set("") self.passcnfm.set("") self.email_Entry.focus() self.email_errLabel.configure(text="") self.user_errLabel.configure(text="") self.pass_errLabel.configure(text="") def view_password(self): self.pass_Entry.configure(show="") self.pass_cnfmEntry.configure(show="") self.view_pass_Button.configure(text="Hide Password", command=self.hide_password) def hide_password(self): self.pass_Entry.configure(show="*") self.pass_cnfmEntry.configure(show="*") self.view_pass_Button.configure(text="View Passwrod", command=self.view_password) def _show_sign_in(self): if self.show_sign_in is not None: self.show_sign_in() self.cancel() def _register(self): if self.register is not None: self.register() def _validate_email(self, event): email = self.email.get() if len(email) == 0: self.email_errLabel.configure(text="Email Must not be Empty...") self.email_valid = False elif not validate_email(email): self.email_errLabel.configure(text="Email Format Invalide...") self.email_valid = False elif self.search_email is not None and not self.search_email(email): self.email_errLabel.configure(text="Email Already Registered...") self.email_valid = False else: self.email_errLabel.configure(text="") self.email_valid = True self.enable_register() def _validate_username(self, event): username = self.username.get() if len(username) == 0: self.user_errLabel.configure(text="Username Must not be Empty...") self.username_valid = False elif self.search_username is not None and not self.search_username( username): self.username_valid = False else: self.user_errLabel.configure(text="") self.username_valid = True self.enable_register() def _validate_password(self, event): password = self.password.get() passcnfm = self.passcnfm.get() if len(password) == 0: self.pass_errLabel.configure(text="Password Must Not be Empty...") self.password_valid = False elif len(password) < 8: self.pass_errLabel.configure( text="Password Must be Longer than 8 Characters...") self.password_valid = False elif password != passcnfm: self.pass_errLabel.configure(text="Password Must Match... ") self.passcnfm_valid = False elif self.search_password is not None and not self.search_password( password): self.pass_errLabel.configure(text="") self.password_valid = False else: self.pass_errLabel.configure(text="") self.passcnfm_valid = True self.password_valid = True self.enable_register() def enable_register(self): if (self.email_valid and self.username_valid and self.password_valid and self.passcnfm_valid): self.register_Button.configure(state="normal") def failed_register(self): self.email.set("") self.username.set("") self.pass_errLabel.configure(text="Email or Username Already used") self.email_Entry.focus()
class App(ThemedTk): def __init__(self): ThemedTk.__init__(self, theme='black') self.title('Установщик F_Reference_H') self.geometry('500x200') x = (self.winfo_screenwidth() - self.winfo_reqwidth()) / 2 y = (self.winfo_screenheight() - self.winfo_reqheight()) / 2 self.wm_geometry("+%d+%d" % (x - 150, y - 20)) self.resizable(width=False, height=False) self.iconphoto( True, PhotoImage(file='bin/ico/ico_main.png') ) flow_hack_png = Image.open(f'bin/ico/max_flowhack.png') flow_hack_png = ImageTk.PhotoImage(flow_hack_png) browse_png = Image.open(f'bin/ico/browse.png') browse_png = ImageTk.PhotoImage(browse_png) self.frame = Frame(self) self.frame.place(relwidth=1, relheight=1) self.url = '' self._path = getcwd() flow_hack_label = Label( self.frame, image=flow_hack_png, cursor='heart' ) flow_hack_label.bind('<Button-1>', open_web) flow_hack_label.place(anchor='c', relx=.5, rely=.1) self.check_icon = BooleanVar() self.check_icon.set(bool(True)) Checkbutton( self.frame, text='Создать ярлык на рабочем столе', var=self.check_icon, cursor='cross' ).place(relx=.5, y=60, anchor='c') Label( self.frame, text='Выберите папку для установки', font=('Times New Roman', 10, 'bold italic') ).place(relx=.5, rely=.485, anchor='c') self.input_url = Entry( self.frame, state=DISABLED, font=('Times New Roman', 9, 'bold italic'), foreground='black' ) self.input_url.place( rely=.6, relx=.5, height=20, relwidth=.7, anchor='c' ) Button( self.frame, image=browse_png, cursor='hand1', command=self.directory ).place(relx=.86, rely=.455) Button( self.frame, image=browse_png, cursor='hand1', command=self.directory ).place(relx=.045, rely=.455) Button( self.frame, text='Установить', cursor='hand1', command=self.install ).place(relx=.5, rely=.75, anchor='c') self.license = Label( self.frame, text='Для подтверждения согласия с лицензионным ' 'соглашением\nНажмите на "Установить" правой кнопкой мыши', font=('Times New Roman', 9, 'bold italic'), foreground='black', cursor='hand1', justify='center' ) self.license.bind( '<Button-1>', lambda no_matter: webopen('https://flowhack.github.io/') ) self.license.place(relx=.5, rely=.93, anchor='c') self.mainloop() def directory(self): fits: bool = False while fits == bool(False): self.url = askdirectory() if ('\\' not in self.url) and ('/' not in self.url): showerror( 'Error', 'Мы заметили, что вы выбрали неверный адрес!' ) else: fits: bool = True self.input_url.configure(state=NORMAL) self.input_url.insert(END, self.url) self.input_url.after( 6000, lambda: self.input_url.configure(state=DISABLED) ) def install(self): url = path.join(self.url) try: if url == '': raise NameError('is empty') elif ('\\' not in self.url) and ('/' not in self.url): raise NameError('not file') move_file('bin/dist/F_Reference_H', url) if self.check_icon.get(): system( f'@powershell \"$x=(New-Object -ComObject ' f'WScript.Shell).CreateShortcut(' f'\'%USERPROFILE%/Desktop/F_Reference_H.lnk\');$x' f'.TargetPath=\'' f'{url}/F_Reference_H/F_Reference_H.exe\';$x' f'.WorkingDirectory=\'' f'{url}/F_Reference_H\';$x.Save()\" ' ) system( f'@powershell \"$x=(New-Object -ComObject ' f'WScript.Shell).CreateShortcut(' f'\'%APPDATA%\Microsoft\Windows\Start ' f'Menu\Programs\F_Reference_H.lnk\');$x' f'.TargetPath=\'' f'{url}/F_Reference_H/F_Reference_H.exe\';$x' f'.WorkingDirectory=\'{url}/F_Reference_H\';$x.Save()\"') showinfo('Successfully', 'Установка прошла успешно!') exit_ex() except NameError as error: if str(error) == 'is empty': showerror('Error', 'Пустое поле пути к папке!') if str(error) == 'not file': showerror( 'Error', 'Мы заметили, что вы выбрали неверный адрес!' )
def _edit(self, event, item): """Edit feed title.""" column = self.tree.identify_column(event.x) if column in ['#1', '#2']: bbox = self.tree.bbox(item, column) entry = Entry(self.tree) entry.place(x=bbox[0], y=bbox[1], width=bbox[2], height=bbox[3], anchor='nw') entry.bind('<Escape>', lambda e: entry.destroy()) entry.bind('<FocusOut>', lambda e: entry.destroy()) if column == '#1': entry.insert(0, self.tree.item(item, 'values')[0]) entry.configure(style='manager.TEntry') def ok(event): name = entry.get() if name: name = self.master.feed_rename( self.tree.set(item, 'Title'), name) self.tree.set(item, 'Title', name) entry.destroy() entry.bind('<Return>', ok) else: entry.insert(0, self.tree.item(item, 'values')[1]) entry.configure(style='no_edit.TEntry', validate='key', validatecommand=self._no_edit_entry) entry.selection_range(0, 'end') entry.focus_set() elif column == '#3': def focus_out(event): x, y = self.tree.winfo_pointerxy() x0 = combo.winfo_rootx() x1 = x0 + combo.winfo_width() y0 = combo.winfo_rooty() y1 = y0 + combo.winfo_height() if not (x0 <= x <= x1 and y0 <= y <= y1): combo.destroy() def ok(event): category = combo.get().strip() self.categories.add(category) self.master.feed_change_cat(self.tree.set(item, 'Title'), self.tree.set(item, 'Category'), category) self.tree.set(item, 'Category', category) combo.destroy() bbox = self.tree.bbox(item, column) cat = list(self.categories) combo = AutoCompleteCombobox(self.tree, values=cat, allow_other_values=True) combo.place(x=bbox[0], y=bbox[1], width=bbox[2], height=bbox[3], anchor='nw') combo.bind('<Escape>', lambda e: combo.destroy()) combo.bind('<FocusOut>', focus_out) combo.bind('<Return>', ok) combo.bind('<<ComboboxSelected>>', ok) combo.current(cat.index(self.tree.set(item, '#3')))
class GUI: # Initialize GUI here def __init__(self): # Modify root title & prevent empty Tkinter GUI window from appearing self.root = Tk() self.root.title("Pyxe Auto-Compiler") self.root.withdraw() # Popup that gets created when you click the 'About' menu option def about_popup(): top = Toplevel() top.title("About Me") top.geometry = "500x400" top.resizable(False, False) top.iconbitmap(pyxe_favicon) about_labelframe = LabelFrame(top, labelanchor="nw", text="Developer Profile:", width=600, height=200, font=('', 10)) about_labelframe.pack(fill="both", expand=True, padx=3, pady=3) profile_photo = Image.open( resource_path( r"pyxe_resources\data\DutytoDevelop_Profile_Pic.png")) resized = profile_photo.resize((150, 150)) profile_photo_resize = ImageTk.PhotoImage(resized) canvas = Canvas(about_labelframe, height=150, width=150) canvas.create_image(75, 75, image=profile_photo_resize) canvas.image = profile_photo_resize canvas.grid(row=1, column=1, padx=3, pady=(3, 0), sticky="nsew") about_label = Label( about_labelframe, text="Name: Nicholas H.\nGitHub: DutytoDevelop", font=('', 10, 'bold')) about_label.configure(anchor="center", justify='center') about_label.grid(row=2, column=1, padx=3, pady=(0, 3), sticky="nsew") return # Open default web browser to the Pyxe GitHub repository page def open_help_page(): help_page_url = "https://GitHub.com/DutytoDevelop/Pyxe" webbrowser.open_new(help_page_url) self.menubar = Menu(self.root) self.optionmenu = Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="Options", menu=self.optionmenu) self.optionmenu.add_command(label="About...", command=about_popup) self.optionmenu.add_command(label="Help", command=open_help_page) self.optionmenu.add_separator() self.optionmenu.add_command(label="Exit", command=self.exit_compiler) self.root.config(menu=self.menubar) # A grid frame that helps layout the widgets on the root window self.frame = Frame(self.root) Grid.rowconfigure(self.root, 0, weight=1) Grid.columnconfigure(self.root, 0, weight=1) self.frame.grid_columnconfigure(2, weight=1) # These widgets make up the function allowing you to select a Python file to compile Label(self.frame, text='Python File:').grid(row=1, column=1, sticky="E") # Variable that connects that's being typed to the textbox self.program_filepath_textbox = Entry(self.frame) self.program_filepath_textbox.configure(width=80, state="disabled") self.program_filepath_textbox.grid(row=1, column=2, sticky='EW', padx=(0, 5), pady=5, ipadx=5) self.file_selection_button = Button( self.frame, text='Select Python File', command=lambda: self.python_get_filepath_of_file( title="Select Python File", initialdir=project_dir, filetypes=[("Python File", "*.py")], element=self.program_filepath_textbox)) self.file_selection_button.configure(width=20) self.file_selection_button.grid(row=1, column=3, padx=5, pady=5, sticky="EW") # These widgets make up the function allowing you to select a picture to be the program's favicon Label(self.frame, text='Program Icon:').grid(row=2, column=1, sticky="E") self.icon_filepath_textbox = Entry(self.frame) self.icon_filepath_textbox.configure(width=80, state="disabled") self.icon_filepath_textbox.grid(row=2, column=2, sticky='EW', padx=(0, 5), pady=5, ipadx=5) self.python_icon_selector = Button( self.frame, text='Select Program Icon', command=lambda: self.python_get_filepath_of_file( title="Select Program Icon", initialdir=project_dir, filetypes=[("Pictures", "*.jpg;*.jpeg,*.png;*.svg;*.ico")], element=self.icon_filepath_textbox)) self.python_icon_selector.configure(width=20) self.python_icon_selector.grid(row=2, column=3, padx=5, pady=5, sticky="EW") # These widgets make up the function allowing you to give a name to the executable Label(self.frame, text='Program Name:').grid(row=3, column=1, sticky="E") self.program_name_textbox = Entry(self.frame) self.program_name_textbox.configure(width=80) self.program_name_textbox.grid(row=3, column=2, sticky='EW', padx=(0, 5), pady=5, ipadx=5) # Radio button options will return a boolean and GUI converts that into '--onefile' or '--onedir' parameter self.radiobtn_compile_option = BooleanVar() self.onefile_compile = Radiobutton( self.frame, text="One File", variable=self.radiobtn_compile_option, value=True, command=None) self.onefile_compile.grid(row=3, column=3, sticky='W', padx=(0, 5), pady=5, ipadx=5) self.onedir_compile = Radiobutton( self.frame, text="One Dir", variable=self.radiobtn_compile_option, value=False, command=None) self.onedir_compile.grid(row=3, column=3, sticky='E', padx=(0, 5), pady=5, ipadx=5) self.radiobtn_compile_option.set( True) # Set this option as the default option # These widgets make up the function allowing you to select where you want to create the executable Label(self.frame, text='Build Folder:').grid(row=4, column=1, sticky="E") self.build_directory_textbox = Entry(self.frame) self.build_directory_textbox.configure(state='disabled') self.build_directory_textbox.grid(row=4, column=2, sticky='EW', padx=(0, 5), pady=5, ipadx=5) select_directory = Button(self.frame, text="Select Directory", command=lambda: self.set_directory_path( title="Select Directory", initialdir=project_dir, element=self.build_directory_textbox)) select_directory.configure(width=20) select_directory.grid(row=4, column=3, sticky="EW", padx=10, pady=5, ipadx=5) # These widgets make up the function allowing you to select where you add the data Label(self.frame, text='Data Folders:').grid(row=5, column=1, sticky="E") self.data_folder_directory_textbox = Entry(self.frame) self.data_folder_directory_textbox.configure(state='disabled') self.data_folder_directory_textbox.grid(row=5, column=2, sticky='EW', padx=(0, 5), pady=5, ipadx=5) add_data_folder = Button( self.frame, text="Add Folder", command=lambda: self.set_directory_path( title="Add Path", initialdir=project_dir, element=self.data_folder_directory_textbox, append_directory=True)) add_data_folder.configure(width=8) add_data_folder.grid(row=5, column=3, sticky="W", padx=10, pady=5, ipadx=5) clear_data_folder = Button( self.frame, text="Clear", command=lambda: self.set_directory_path( title="Add Directory", initialdir=project_dir, element=self.data_folder_directory_textbox, append_directory=True)) clear_data_folder.configure(width=8) clear_data_folder.grid(row=5, column=3, sticky="E", padx=10, pady=5, ipadx=5) # These widgets make up the function that allows you to compile the executable self.compile_button = Button( self.frame, text="Compile", command=lambda: thread_function(function=self.compile_executable)) self.compile_button.grid(row=6, column=1, columnspan=2, sticky='EW', padx=(10, 5), pady=5, ipadx=5) self.compilation_section = LabelFrame(self.frame, text='Console Output:', labelanchor="nw") self.compilation_section.configure(height=11) self.compilation_section.grid(row=7, column=1, columnspan=4, sticky="NESW", padx=10, pady=10) self.compiler_text = ScrolledText(self.compilation_section, yscrollcommand=True, bg='lightgrey', font=('Nimbus Mono L', 9), fg='green') self.compiler_text.configure(height=11, state="disabled") self.compiler_text.bind("<Key>", lambda e: "break") self.compiler_text.yview_pickplace("end") self.compiler_text.pack(expand=True, fill="both", padx=5, pady=7) # This widget make up the function allowing you to discontinue compiling the executable self.quit_button = Button(self.frame, text="Quit", command=lambda: self.exit_compiler()) self.quit_button.grid(row=6, column=3, sticky='EW', padx=10, pady=5, ipadx=5) # Expand self.frame to fit the root window self.frame.grid(sticky="nsew", padx=2, pady=2) # GUI size and placement on the screen self.screen_width = GetSystemMetrics(0) self.screen_height = GetSystemMetrics(1) self.app_width = 800 self.app_height = 430 self.root.geometry( str(self.app_width) + "x" + str(self.app_height) + "+" + str(int((self.screen_width / 2) - (self.app_width / 2))) + "+" + str(int((self.screen_height / 2) - (self.app_height / 2)))) # The icon that appears in the corner of the executable self.root.iconbitmap(pyxe_favicon) # Restricts the GUI from being resized self.root.resizable(False, False) # Get rid of extra GUI window when creating dialog boxes self.root.deiconify() # Grab filepath of Python file def python_get_filepath_of_file(self, title, initialdir, filetypes, element): self.title = title self.initialdir = initialdir self.filetypes = filetypes self.python_get_filepath = self.get_filepath_of_file( title, initialdir, filetypes) self.element = element self.element.configure(state="enabled") self.set_entrybox_text(element, self.python_get_filepath) self.element.configure(state="disabled") return # Function that creates the PythonFile object with the data necessary to compile the executable def compile_executable(self): self.executable_info = PythonFile( python_filepath=self.get_entrybox_text( element=self.program_filepath_textbox), name=self.get_entrybox_text(element=self.program_name_textbox), favicon_path=self.get_entrybox_text( element=self.icon_filepath_textbox), build_directory=self.get_entrybox_text( element=self.build_directory_textbox), data_folder_present=self.get_entrybox_text( element=self.data_folder_directory_textbox), onefile_radiobtn_selected=self.radiobtn_compile_option.get()) self.executable_info.make_exe() def exit_compiler(self): self.root.destroy() del self.executable_info exit() # Display Tkinter GUI def run_autocompiler(self): self.root.mainloop() def get_radiobutton_value(self, element): self.element = element element.get() # Return text inside of Tkinter Entry widget def get_entrybox_text(self, element): self.element = element element.configure(state="normal") entrybox_text = os.path.join(self.element.get()) element.configure(state="disabled") return entrybox_text # Set text inside of Tkinter Entry widget def set_entrybox_text(self, element: Text, text: str, append_text: bool = False): self.element = element self.text = text if (append_text is True): if (detected_os == 'windows'): seperator = ';' else: seperator = ':' if (self.get_entrybox_text(self.element) != ''): self.text = self.text else: self.text = seperator.join( self.get_entrybox_text(self.element), self.text) self.element.insert('end', self.text) else: self.element.delete(0, 'end') self.element.insert(0, self.text) return # Return path of directory if it exists def get_directory_path(self, title, initialdir): # If file doesn't exist, continue prompting file selection self.selected_directory_or_file = filedialog.askdirectory( title=title, initialdir=initialdir) # Return filepath return self.selected_directory_or_file # Set Tkinter's directory selection dialog box to given directory def set_directory_path(self, title, initialdir, element, append_directory=False): self.directory_path = self.get_directory_path(title, initialdir) element.configure(state="enabled") self.set_entrybox_text(element, self.directory_path, append_text=append_directory) element.configure(state="disabled") return # Return filepath for the file def get_filepath_of_file(self, title, initialdir, filetypes): # If file doesn't exist, continue prompting file selection self.title = title self.initialdir = initialdir self.filetypes = filetypes self.selected_file = filedialog.askopenfilename(title=title, initialdir=initialdir, filetypes=filetypes) return self.selected_file
class MainWindow(mp.Process): """Defines the main control window and all its control logic. As Tkinter only allows to create root windwo (Tk()) in the main process, this is implemented as its own subprocess that will open the window with a call to self.run() Args: connector_dict: Dictionary create by calling multiprocessing.Manger().dict() message_q: Queue that will be polled every few seconds. Elements in queue will be plotted to the internal text field. start_analysis_e: Event signaling if analysis can be started connected_e: Event signaling that LSL streams are connected ready_for_connection_e: Event signaling that LSL streams have been selected in GUI save_e: Event signaling that data should be saved. """ def __init__(self, connector_dict: Dict, message_q: mp.Queue, start_recording_e: mp.Event, start_analysis_e: mp.Event, connected_e: mp.Event, ready_for_connection_e: mp.Event, save_e: mp.Event): super().__init__() self.connector_dict = connector_dict self.message_q = message_q self.start_recording_e = start_recording_e self.start_analysis_e = start_analysis_e self.ready_for_connection_e = ready_for_connection_e self.connected_e = connected_e self.save_e = save_e self.master = None # Parameters self.eeg_stream = None self.eeg_streams_dict = None self.marker_stream = None self.marker_streams_dict = None self.channel_select = None self.update_interval = None self.record_time = None self.y_min = None self.y_max = None self.save_filename = None self.filter_check = None self.squared_check = None self.connected = None # Widgets self.eeg_stream_label = None self.eeg_stream_combobox = None self.eeg_stream_button = None self.marker_stream_label = None self.marker_stream_combobox = None self.marker_stream_button = None self.filter_checkbutton_label = None self.filter_checkbutton = None self.connect_button = None self.seperator = None self.start_recording_btn = None self.record_time_label = None self.Separator_2 = None self.update_interval_label = None self.update_interval_combobox = None self.start_analysis_btn = None self.channel_select_label = None self.channel_select_combobox = None self.squared_label = None self.squared_checkbtn = None self.update_ylim_btn = None self.y_min_label = None self.y_min_entry = None self.y_max_label = None self.y_max_entry = None self.seperator = None self.save_label = None self.save_entry = None self.save_btn = None self.text_console = None def build_main_window(self): # Hack to make tkinter work in other process than main from tkinter import Tk, StringVar, Text, HORIZONTAL, EW, IntVar from tkinter.ttk import Separator, Combobox, Button, Label, Entry, Checkbutton self.master = Tk() # Parameters self.eeg_stream = StringVar() self.eeg_streams_dict = {} self.marker_stream = StringVar() self.marker_streams_dict = {} self.channel_select = IntVar() self.channel_select.set(0) self.update_interval = IntVar() self.update_interval.set(0) self.record_time = StringVar() self.record_time.set("00:00 minutes recorded") self.y_min = IntVar() self.y_min.set(-10) self.y_max = IntVar() self.y_max.set(10) self.save_filename = StringVar() self.save_filename.set("1") self.filter_check = IntVar() self.filter_check.set(1) self.squared_check = IntVar() self.squared_check.set(0) self.connected = False self.print_from_queue() # Widgets self.eeg_stream_label = Label(self.master, text='EEG LSL-stream:') self.eeg_stream_label.grid(row=0, column=0) self.eeg_stream_combobox = Combobox(self.master, textvariable=self.eeg_stream) self.eeg_stream_combobox.configure(state='disabled') self.eeg_stream_combobox.grid(row=0, column=1) self.eeg_stream_button = Button( self.master, text='Refresh', command=lambda: self.find_streams('EEG', self.eeg_stream_combobox, self.eeg_streams_dict, self. eeg_stream)) self.eeg_stream_button.grid(row=0, column=2) self.marker_stream_label = Label(self.master, text='Marker LSL-stream:') self.marker_stream_label.grid(row=1, column=0) self.marker_stream_combobox = Combobox(self.master, textvariable=self.marker_stream) self.marker_stream_combobox.configure(state='disabled') self.marker_stream_combobox.grid(row=1, column=1) self.marker_stream_button = Button( self.master, text='Refresh', command=lambda: self.find_streams( 'P300_Marker', self.marker_stream_combobox, self. marker_streams_dict, self.marker_stream)) self.marker_stream_button.grid(row=1, column=2) self.filter_checkbutton_label = Label( self.master, text='Filter (Butter, Order 4, Cutoff: 1, 30):') self.filter_checkbutton_label.grid(row=2, column=0) self.filter_checkbutton = Checkbutton(self.master, variable=self.filter_check, text='') self.filter_checkbutton.grid(row=2, column=1) self.connect_button = Button(self.master, text='Connect', command=self.connect_streams) self.connect_button.grid(row=2, column=2) self.connect_button.configure(state='disabled') self.seperator = Separator(self.master, orient=HORIZONTAL) self.seperator.grid(row=3, column=0, columnspan=3, sticky=EW) self.start_recording_btn = Button(self.master, text='Start recoding', command=self.start_recording) self.start_recording_btn.grid(row=4, column=2) self.start_recording_btn.configure(state='disabled') self.record_time_label = Label(self.master, textvariable=self.record_time) self.record_time_label.grid(row=4, column=1) self.Separator_2 = Separator(self.master) self.Separator_2.grid(row=5, column=0, columnspan=3, sticky=EW) self.update_interval_label = Label(self.master, text='Update interval (seconds):') self.update_interval_label.grid(row=6, column=0) self.update_interval_combobox = Combobox( self.master, textvariable=self.update_interval) self.update_interval_combobox.bind('<<ComboboxSelected>>', self.update_connector_dict) self.update_interval_combobox.grid(row=6, column=1) self.update_interval_combobox['values'] = list(range(10)) self.update_interval_combobox.configure(state='disabled') self.start_analysis_btn = Button(self.master, text='Start analysis', command=self.start_analysis) self.start_analysis_btn.grid(row=6, column=2) self.start_analysis_btn.configure(state='disabled') self.channel_select_label = Label(self.master, text='Channel to display:') self.channel_select_label.grid(row=7, column=0) self.channel_select_combobox = Combobox( self.master, textvariable=self.channel_select) self.channel_select_combobox.bind('<<ComboboxSelected>>', self.update_connector_dict) self.channel_select_combobox.grid(row=7, column=1) self.channel_select_combobox.configure(state='disabled') self.squared_label = Label(self.master, text='squared') self.squared_label.grid(row=8, column=0) self.squared_checkbtn = Checkbutton(self.master, variable=self.squared_check) self.squared_checkbtn.grid(row=8, column=1) self.squared_checkbtn.configure(state='disabled') self.update_ylim_btn = Button(self.master, text='Update', command=self.update_connector_dict) self.update_ylim_btn.grid(row=8, column=2) self.update_ylim_btn.configure(state='disabled') self.y_min_label = Label(self.master, text='Y min:') self.y_min_label.grid(row=9, column=0) self.y_min_entry = Entry(self.master, textvariable=self.y_min) self.y_min_entry.grid(row=9, column=1) self.y_min_entry.configure(state='disabled') self.y_max_label = Label(self.master, text='Y max:') self.y_max_label.grid(row=10, column=0) self.y_max_entry = Entry(self.master, textvariable=self.y_max) self.y_max_entry.grid(row=10, column=1) self.y_max_entry.configure(state='disabled') self.seperator = Separator(self.master, orient=HORIZONTAL) self.seperator.grid(row=11, column=0, columnspan=3, sticky=EW) self.save_label = Label(self.master, text='Filename:') self.save_label.grid(row=12, column=0) self.save_entry = Entry(self.master, textvariable=self.save_filename) self.save_entry.grid(row=12, column=1) self.save_entry.configure(state='disabled') self.save_btn = Button(self.master, text='Save', command=self.save) self.save_btn.grid(row=12, column=2) self.save_btn.configure(state='disabled') self.text_console = Text(self.master) self.text_console.grid(row=15, column=0, rowspan=3, columnspan=3) self.text_console.configure(state='disabled') def save(self): self.update_connector_dict() self.save_e.set() def update_channel_select(self): num_channels = self.connector_dict['number of channels'] self.channel_select_combobox['values'] = list(range(num_channels)) def start_recording(self): self.connect_button.configure(state='disabled') self.start_recording_btn.configure(state='disabled') self.channel_select_combobox.configure(state='normal') self.update_interval_combobox.configure(state='normal') self.y_min_entry.configure(state='normal') self.y_max_entry.configure(state='normal') self.update_ylim_btn.configure(state='normal') self.squared_checkbtn.configure(state='normal') self.update_channel_select() self.update_recording_time() self.start_recording_e.set() self.start_analysis_btn.configure(state='normal') def update_recording_time(self): num_samples = self.connector_dict['sample count'] samplerate = self.connector_dict['samplerate'] number_of_seconds = int(num_samples / samplerate) minutes = number_of_seconds // 60 remaining_seconds = number_of_seconds % 60 result_string = '{:02}:{:02} minutes recorded'.format( minutes, remaining_seconds) self.record_time.set(result_string) self.master.after(1000, self.update_recording_time) def start_analysis(self): self.start_analysis_btn.configure(state='disabled') self.save_btn.configure(state='normal') self.save_entry.configure(state='normal') self.update_connector_dict() self.start_analysis_e.set() def find_streams(self, stream_type, widget, stream_dict, var): stream_dict.clear() timeout = 3 self.print_to_console('Searching for ' + stream_type + ' streams... (timeout = ' + str(timeout) + ' seconds)') streams = resolve_byprop('type', stream_type, timeout=timeout) if not streams: self.print_to_console('No stream found.') return widget.configure(state='normal') stream_list = [] for stream in streams: stream_dict[stream.name()] = stream stream_list.append(stream.name()) widget['values'] = stream_list if len(streams) >= 1: var.set(streams[0].name()) self.print_to_console(str(len(streams)) + ' Stream(s) found!') self.test_if_two_streams() def test_if_two_streams(self): if self.eeg_stream.get() is not '' and self.marker_stream.get( ) is not '': self.connect_button.configure(state='normal') else: self.connect_button.configure(state='disabled') def print_to_console(self, text_to_print): text_to_print = str(text_to_print) self.text_console.configure(state='normal') self.text_console.insert('end', text_to_print + '\n') self.text_console.configure(state='disabled') def print_from_queue(self): if not self.message_q.empty(): self.print_to_console(self.message_q.get()) self.master.after(500, self.print_from_queue) # noinspection PyUnusedLocal def update_connector_dict(self, event=None): self.connector_dict['update interval'] = self.update_interval.get() self.connector_dict['channel select'] = self.channel_select.get() self.connector_dict['eeg streamname'] = self.eeg_stream.get() self.connector_dict['marker streamname'] = self.marker_stream.get() self.connector_dict['y lim'] = [self.y_min.get(), self.y_max.get()] self.connector_dict['savefile'] = self.save_filename.get() self.connector_dict['filter'] = self.filter_check.get() self.connector_dict['squared'] = self.squared_check.get() def connect_streams(self): self.eeg_stream_combobox.configure(state='disabled') self.eeg_stream_button.configure(state='disabled') self.marker_stream_combobox.configure(state='disabled') self.marker_stream_button.configure(state='disabled') self.filter_checkbutton.configure(state='disabled') self.connect_button.configure(state='disabled') self.update_connector_dict() self.ready_for_connection_e.set() self.connected_e.wait() self.start_recording_btn.configure(state='normal') def run(self): self.build_main_window() self.master.mainloop()
class PixivSort: curr_search_result = [] image_files = [] images_obj = [] image_list = [] current_page = 1 loading_img = None image_raiting_labels = [] image_pages_labels = [] def __init__(self): self.pth = "./" try: self.pth = sys._MEIPASS + "/" except Exception: pass self.root = Tk() self.root.title('PixivSort by Zettroke') self.root.iconbitmap(os.path.join(base_dir, 'icon.ico')) self.progress_bar_var = IntVar() self.progress_bar_label_var = StringVar() self.frame = Frame(self.root, height=100, width=1000, bg='#0094DC') self.frame.place(x=0, y=0) Style().configure("TButton", padding=1, relief="flat", background="#0094DC") Style().configure("TLabel", background="#0094DC") Style().configure("C.TButton", padding=0, relief="flat", font="Arial 12") self.root.minsize(1000, 810) self.root.maxsize(1000, 810) self.canvas = Canvas(self.root, width=1000, height=2000, bg='white') self.canvas.place(x=0, y=100) self.canvas.bind('<Button-1>', self.press) self.progress_bar = Progressbar(self.root, length=915, orient='horizont', variable=self.progress_bar_var, maximum=1000) self.progress_bar.place(x=0, y=790) self.progress_bar_label = LabelOld(self.root, textvariable=self.progress_bar_label_var, font='Arial 10', bg='white') self.progress_bar_label.place(x=915, y=787.5) cnv = Canvas(self.root, width=300, height=100, bg='#0094DC', bd=0, highlightthickness=0, relief='ridge') cnv.place(x=0, y=0) MyLabel = ImageTk.PhotoImage(Image.open(os.path.join(base_dir, 'Label.png')).resize((round(564/(264/100)), 100), Image.BICUBIC)) cnv.create_image(125, 52.5, image=MyLabel) label = Label(self.root, text='Search', anchor=CENTER, font='Arial 16') label.place(x=500, y=20) self.total_pages_num = 0 self.total_pages_label = Label(self.root, text='/0', anchor=W, font='Arial 14') self.total_pages_label.place(x=920, y=70) self.button = Button(self.root, text='Go!') self.button.place(x=650, y=50) self.button.bind('<Button-1>', self.search) self.button_page_inc = Button(self.root, text='>', width=1, state=DISABLED) self.button_page_dec = Button(self.root, text='<', width=1, state=DISABLED) self.button_page_inc.place(x=970, y=72) self.button_page_dec.place(x=845, y=72) self.button_page_inc.bind('<Button-1>', self.page_button) self.button_page_dec.bind('<Button-1>', self.page_button) self.loading_img = ImageTk.PhotoImage(Image.open(os.path.join(base_dir, 'loading.png')).resize((170, 170), Image.BICUBIC)) self.entry = Entry(self.root, width=18, font='Arial 14') self.entry.place(x=430, y=50) self.entry.bind('<Return>', self.search) self.entry_page_number = Entry(self.root, width=5, font='Arial 14', state=DISABLED) self.entry_page_number.place(x=860, y=70) self.entry_page_number.bind('<Return>', self.show_new) self.root.mainloop() def press(self, event): tap = event.widget.find_overlapping(event.x, event.y, event.x+1, event.y+1) if len(tap) != 0: tap = int(event.widget.gettags(tap[0])[0]) img = self.image_list[tap-1] if img[3] == 1: webbrowser.open("https://www.pixiv.net/member_illust.php?mode=medium&illust_id=" + str(img[0])) else: webbrowser.open("https://www.pixiv.net/member_illust.php?mode=manga&illust_id=" + str(img[0])) def set_total_pages(self, total): self.total_pages_num = math.ceil(40000/15 if total/15 > 40000/15 else total/15) self.total_pages_label.config(text='/' + str(self.total_pages_num)) self.entry_page_number.delete(0, END) self.entry_page_number.insert(0, '1') self.current_page = 1 def search(self, event): event.widget.config(state=DISABLED) self.progress_bar_label_var.set('downloading...') self.progress_bar_var.set(0) Thread(target=send_request_multiproc.search, args=(self.entry.get(), self.done, self.progress_update), daemon=True).start() def done(self, res): self.curr_search_result = res self.entry_page_number.configure(state=NORMAL) self.button_page_inc.configure(state=NORMAL) self.button_page_dec.configure(state=NORMAL) self.set_total_pages(len(res)) self.progress_bar_label_var.set('done!!!') self.show() self.entry.config(state=NORMAL) def progress_update(self, done, total): print("done", round(done/total*100, 2)) self.root.after_idle(self.change_pbar_value, (done/total)) def change_pbar_value(self, val): self.progress_bar_var.set(val*1000) def load_image(self, num): img = self.image_list[num] if hi_res_preview: f = io.BytesIO(requests.get(img[1], headers={"Referer": "https://www.pixiv.net/"}).content) else: f = io.BytesIO(requests.get(img[2], headers={"Referer": "https://www.pixiv.net/"}).content) image = ImageTk.PhotoImage(Image.open(f).resize((170, 170), Image.BICUBIC)) if img in self.image_list: self.image_files.append(image) self.canvas.itemconfig(self.images_obj[num], image=image) def show_new(self, event=None): if not 0 < int(self.entry_page_number.get()) < self.total_pages_num: self.entry_page_number.delete(0, END) self.entry_page_number.insert(0, '0') else: self.current_page = int(self.entry_page_number.get()) self.show() def page_button(self, event): if event.widget.cget('text') == '>' and self.current_page < self.total_pages_num: temp = int(self.entry_page_number.get()) self.entry_page_number.delete(0, END) self.entry_page_number.insert(0, str(temp + 1)) self.show_new() elif event.widget.cget('text') == '<' and self.current_page > 1: temp = int(self.entry_page_number.get()) self.entry_page_number.delete(0, END) self.entry_page_number.insert(0, str(temp - 1)) self.show_new() def show(self, event=None): self.button.config(state=NORMAL) for i in self.image_pages_labels: i.destroy() for i in self.image_raiting_labels: i.destroy() self.image_pages_labels.clear() self.image_raiting_labels.clear() self.images_obj.clear() self.image_files.clear() self.canvas.delete(ALL) try: self.image_list = self.curr_search_result[self.current_page*15-15:self.current_page*15] y = 0 x = 35 for i in range(len(self.image_list)): if i % 5 == 0: y += 220 x = 35 self.images_obj.append(self.canvas.create_image(x, y, image=self.loading_img, anchor=SW, tags=str(i+1))) label1 = LabelOld(self.root, text='Raiting: ' + str(self.image_list[i][4]), bg='white') label1.place(x=x, y=y+100) self.image_raiting_labels.append(label1) label2 = LabelOld(self.root, text='Pages: ' + str(self.image_list[i][3]), bg='white') label2.place(x=x+120, y=y+100) self.image_pages_labels.append(label2) x += 190 for i in range(len(self.image_list)): Thread(target=self.load_image, args=(i,), daemon=True).start() except Exception: pass
class Page1(Frame): def __init__(self, master): super().__init__(master, relief='flat', borderwidth=20) self.business_logic = BusinessLogic() self.init_ui() def chk_btn1_onclick(self): checked = self.chk_btn_var1.get() if checked: self.qty_entry1.configure(state=NORMAL) else: self.qty_entry1.configure(state=NORMAL) self.enable_btn() def chk_btn2_onclick(self): checked = self.chk_btn_var2.get() if checked: self.qty_entry2.configure(state=NORMAL) else: self.qty_entry2.configure(state=NORMAL) self.enable_btn() def chk_btn3_onclick(self): checked = self.chk_btn_var3.get() if checked: self.qty_entry3.configure(state=NORMAL) else: self.qty_entry3.configure(state=NORMAL) self.enable_btn() def chk_btn4_onclick(self): checked = self.chk_btn_var4.get() if checked: self.qty_entry4.configure(state=NORMAL) else: self.qty_entry4.configure(state=NORMAL) self.enable_btn() def chk_btn5_onclick(self): checked = self.chk_btn_var5.get() if checked: self.qty_entry5.configure(state=NORMAL) else: self.qty_entry5.configure(state=NORMAL) self.enable_btn() def enable_btn(self): if any((self.chk_btn_var1.get(), self.chk_btn_var2.get(), self.chk_btn_var3.get(), self.chk_btn_var4.get(), self.chk_btn_var5.get())): self.gen_receipt_btn.configure(state=NORMAL) else: self.gen_receipt_btn.configure(state=DISABLED) def qty_entry1_keybind(self, event): self.validate_for_int(event, self.qty_entry1) def qty_entry2_keybind(self, event): self.validate_for_int(event, self.qty_entry2) def qty_entry3_keybind(self, event): self.validate_for_int(event, self.qty_entry3) def qty_entry4_keybind(self, event): self.validate_for_int(event, self.qty_entry4) def qty_entry5_keybind(self, event): self.validate_for_int(event, self.qty_entry5) def validate_for_int(self, event, widget): val = widget.get() try: float(widget.get()) except ValueError as verr: print(str(verr)) if not event.char.isdigit(): widget.delete(0, END) widget.insert(0, val[:-1]) def _set_header(self): for col, item in enumerate(self.business_logic.header): Label(self, text=item, font='Helvetica 12 bold').grid(row=0, column=col, sticky='NW') def _set_body(self): self.chk_btn_var1 = BooleanVar() self.chk_btn_var2 = BooleanVar() self.chk_btn_var3 = BooleanVar() self.chk_btn_var4 = BooleanVar() self.chk_btn_var5 = BooleanVar() # order column self.chk_btn1 = Checkbutton(self, text="", variable=self.chk_btn_var1, command=self.chk_btn1_onclick) self.chk_btn1.grid(row=1, column=0, sticky='NW') self.chk_btn2 = Checkbutton(self, text="", variable=self.chk_btn_var2, command=self.chk_btn2_onclick) self.chk_btn2.grid(row=2, column=0, sticky='NW') self.chk_btn3 = Checkbutton(self, text="", variable=self.chk_btn_var3, command=self.chk_btn3_onclick) self.chk_btn3.grid(row=3, column=0, sticky='NW') self.chk_btn4 = Checkbutton(self, text="", variable=self.chk_btn_var4, command=self.chk_btn4_onclick) self.chk_btn4.grid(row=4, column=0, sticky='NW') self.chk_btn5 = Checkbutton(self, text="", variable=self.chk_btn_var5, command=self.chk_btn5_onclick) self.chk_btn5.grid(row=5, column=0, sticky='NW') # item column for row, item in enumerate(self.business_logic.items.keys()): _row = row + 1 Label(self, text=f"{item}").grid(row=_row, column=1, sticky='NW') # unit price column for row, unit_price in enumerate(self.business_logic.items.values()): _row = row + 1 Label(self, text=f"{unit_price}₹").grid(row=_row, column=2, sticky='NW') # quantity column self.qty_entry1 = Entry(self, state=DISABLED) self.qty_entry1.grid(row=1, column=3) self.qty_entry2 = Entry(self, state=DISABLED) self.qty_entry2.grid(row=2, column=3) self.qty_entry3 = Entry(self, state=DISABLED) self.qty_entry3.grid(row=3, column=3) self.qty_entry4 = Entry(self, state=DISABLED) self.qty_entry4.grid(row=4, column=3) self.qty_entry5 = Entry(self, state=DISABLED) self.qty_entry5.grid(row=5, column=3) self.qty_entry1.bind('<KeyRelease>', self.qty_entry1_keybind) self.qty_entry2.bind('<KeyRelease>', self.qty_entry2_keybind) self.qty_entry3.bind('<KeyRelease>', self.qty_entry3_keybind) self.qty_entry4.bind('<KeyRelease>', self.qty_entry4_keybind) self.qty_entry5.bind('<KeyRelease>', self.qty_entry5_keybind) self.gen_receipt_btn = Button(self, text="Generate Receipt", command=self.on_gen_receipt_btn_click) self.gen_receipt_btn.grid(row=8, column=2, padx=20, pady=20) self.gen_receipt_btn.configure(state=DISABLED) self.cancel_btn = Button(self, text="Clear", command=self.on_cancel_btn_click) self.cancel_btn.grid(row=8, column=3, padx=20, pady=20) Label(self, text='(Select your orders and then enter the quantities)', font='Helvetica 8 italic').grid(row=9, columnspan=4, sticky='NW') def init_ui(self): self.master.title(self.business_logic.title) self.pack(fill=None, expand=False) self._set_header() self._set_body() def on_cancel_btn_click(self): self.clear_all() def on_gen_receipt_btn_click(self): qty1 = self.qty_entry1.get().strip() qty2 = self.qty_entry2.get().strip() qty3 = self.qty_entry3.get().strip() qty4 = self.qty_entry4.get().strip() qty5 = self.qty_entry5.get().strip() if any((qty1, qty2, qty3, qty4, qty5)): for item, qty in zip(self.business_logic.items, (qty1, qty2, qty3, qty4, qty5)): if bool(qty): self.business_logic.set(item, qty) Page2(self.master, self).show() else: messagebox.showwarning("Quantities", "Empty quantity fields") def clear_all(self): self.chk_btn1.deselect() self.chk_btn2.deselect() self.chk_btn3.deselect() self.chk_btn4.deselect() self.chk_btn5.deselect() self.qty_entry1.delete(0, END) self.qty_entry2.delete(0, END) self.qty_entry3.delete(0, END) self.qty_entry4.delete(0, END) self.qty_entry5.delete(0, END) self.qty_entry1.configure(state=DISABLED) self.qty_entry2.configure(state=DISABLED) self.qty_entry3.configure(state=DISABLED) self.qty_entry4.configure(state=DISABLED) self.qty_entry5.configure(state=DISABLED) self.gen_receipt_btn.configure(state=DISABLED) self.business_logic = BusinessLogic()
class fiveOhOne: def __init__(self, master, player1name, player2name, numbersets, numberlegs): self.master = master self.frame = Frame(self.master) self.player1name = player1name self.player2name = player2name self.numbersets = numbersets self.numberlegs = numberlegs game_state.setup(self.player1name, self.player2name, self.numbersets, self.numberlegs) self.configure_gui1() self.who_starts(game_state.currentsets, game_state.currentlegs) #self.player_setup(player1name, player2name) self.counter = 0 self.stats_update(player1, player2) self.pl1avg.set(0) self.pl2avg.set(0) def configure_gui1(self): self.master.title("501") self.master.geometry("600x500") # function binding return key to entry box self.master.bind('<Return>', lambda e: self.score_Entered()) #create frames labFrame1 = LabelFrame(self.master, text="Player1 Stats") labFrame2 = LabelFrame(self.master, text="Player2 Stats") labFrame3 = LabelFrame(self.master, text="Player1 Scores") labFrame4 = LabelFrame(self.master, text="Player2 Scores") labFrame5 = LabelFrame(self.master, text="Enter Scores") #self.labFrame6 = LabelFrame(self.master, text="Additional info") #make frames vis(ible labFrame1.grid(row=0, column=0, rowspan=2, sticky='ns') labFrame3.grid(row=0, column=1) labFrame4.grid(row=0, column=2) labFrame2.grid(row=0, column=3, rowspan=2, sticky='ns') labFrame5.grid(row=1, column=1, columnspan=2, sticky='ew') #self.labFrame6.grid(row=3, column=1, columnspan=2, sticky='ew') #stringvars self.pl1name = StringVar() self.pl2name = StringVar() self.pl1sets = StringVar() self.pl1legs = StringVar() self.pl160 = StringVar() self.pl180 = StringVar() self.pl1100 = StringVar() self.pl1140 = StringVar() self.pl1180 = StringVar() self.pl1avg = StringVar() self.pl1chtpc = StringVar() self.pl1chtnumbs = StringVar() #player to go boolean self.player1_togo = True #frame 1 widgets Label(labFrame1, text="Totals").grid(row=0, column=0, sticky='w') Label(labFrame1, text="Sets:").grid(row=1, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1sets).grid(row=1, column=1) Label(labFrame1, text="Legs:").grid(row=2, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1legs).grid(row=2, column=1) Label(labFrame1, text="60+:").grid(row=3, column=0, sticky='w') Label(labFrame1, textvariable=self.pl160).grid(row=3, column=1) Label(labFrame1, text="80+:").grid(row=4, column=0, sticky='w') Label(labFrame1, textvariable=self.pl180).grid(row=4, column=1) Label(labFrame1, text="100+:").grid(row=5, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1100).grid(row=5, column=1) Label(labFrame1, text="140+:").grid(row=6, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1140).grid(row=6, column=1) Label(labFrame1, text="180:").grid(row=7, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1180).grid(row=7, column=1) Label(labFrame1, text="Averages").grid(row=8, column=0, sticky='w') Label(labFrame1, text="Score:").grid(row=9, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1avg).grid(row=9, column=1) Label(labFrame1, text="Checkout %:").grid(row=10, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1chtpc).grid(row=10, column=1) Label(labFrame1, text="Checkout Hit/Thrown:").grid(row=11, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1chtnumbs).grid(row=11, column=1) #stringvars self.pl2sets = StringVar() self.pl2legs = StringVar() self.pl260 = StringVar() self.pl280 = StringVar() self.pl2100 = StringVar() self.pl2140 = StringVar() self.pl2180 = StringVar() self.pl2avg = StringVar() self.pl2chtpc = StringVar() self.pl2chtnumbs = StringVar() #frame 2 widgets Label(labFrame2, text="Totals").grid(row=0, column=0, sticky='w') Label(labFrame2, text="Sets:").grid(row=1, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2sets).grid(row=1, column=1) Label(labFrame2, text="Legs:").grid(row=2, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2legs).grid(row=2, column=1) Label(labFrame2, text="60+:").grid(row=3, column=0, sticky='w') Label(labFrame2, textvariable=self.pl260).grid(row=3, column=1) Label(labFrame2, text="80+:").grid(row=4, column=0, sticky='w') Label(labFrame2, textvariable=self.pl280).grid(row=4, column=1) Label(labFrame2, text="100+:").grid(row=5, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2100).grid(row=5, column=1) Label(labFrame2, text="140+:").grid(row=6, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2140).grid(row=6, column=1) Label(labFrame2, text="180:").grid(row=7, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2180).grid(row=7, column=1) Label(labFrame2, text="Averages").grid(row=8, column=0, sticky='w') Label(labFrame2, text="Score:").grid(row=9, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2avg).grid(row=9, column=1) Label(labFrame2, text="Checkout %:").grid(row=10, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2chtpc).grid(row=10, column=1) Label(labFrame2, text="Checkout Hit/Thrown:").grid(row=11, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2chtnumbs).grid(row=11, column=1) #frame 3 widgets self.pl1remaining = StringVar() Label(labFrame3, text="Player:").grid(row=0, column=0) Label(labFrame3, textvariable=self.pl1name).grid(row=0, column=1) Label(labFrame3).grid(row=1) Label(labFrame3, text="Remaining").grid(row=2, column=0, columnspan=2, sticky='ew') self.remlabel1 = Label(labFrame3, textvariable=self.pl1remaining) self.remlabel1.grid(row=3, column=0, columnspan=2) self.remlabel1.configure(width=3, background='white', font=(None, 35)) #self.pl1remaining.set(self.pl1dict['score']) self.pl1name.set(game_state.player1) #frame 4 widgets self.pl2remaining = StringVar() Label(labFrame4, text="Player:").grid(row=0, column=0) Label(labFrame4, textvariable=self.pl2name).grid(row=0, column=1) Label(labFrame4).grid(row=1) Label(labFrame4, text="Remaining").grid(row=2, column=0, columnspan=2, sticky='ew') self.remlabel2 = Label(labFrame4, textvariable=self.pl2remaining) self.remlabel2.grid(row=3, column=0, columnspan=2) self.remlabel2.configure(width=3, background='white', font=(None, 35)) #self.pl2remaining.set(self.pl2dict['score']) self.pl2name.set(game_state.player2) #frame 5 widgets self.playertogo = StringVar() self.scoreEntered = StringVar() Label(labFrame5, text=" ").grid(row=0, column=0) #Label(labFrame5).grid(row=0, column=1) #Label(labFrame5).grid(row=0, column=2) Label(labFrame5, text="To Go:").grid(row=1, column=1) playerLabel = Label(labFrame5, textvariable=self.playertogo) playerLabel.grid(row=2, column=1) playerLabel.configure(font=(None, 20)) self.number_entry = Entry(labFrame5, textvariable=self.scoreEntered, width=5) self.number_entry.grid(row=2, column=2) self.number_entry.configure(background='white', font=(None, 20)) self.number_entry.focus() def stats_update(self, player1, player2): self.pl1sets.set(player1.stats['sets']) self.pl1legs.set(player1.stats['legs']) self.pl1remaining.set(player1.stats['score']) self.pl160.set(player1.stats['60+']) self.pl180.set(player1.stats['80+']) self.pl1100.set(player1.stats['100+']) self.pl1140.set(player1.stats['140+']) self.pl1180.set(player1.stats['180']) numbset = ( "%s / %s" % (player1.stats['doubleshit'], player1.stats['dartsatdoubles'])) self.pl1chtnumbs.set(numbset) #if player1.stats['dartsatdoubles'] == 0: #player1.stats['doubleshit'] = 1 #pc1 = (player1.stats['dartsatdoubles']/player1.stats['doubleshit']) self.pl1chtpc.set(player1.stats['checkoutpc']) average1 = (player1.stats['totalScore'] / player1.stats['numberDarts']) * 3 average1 = round(average1, 2) self.pl1avg.set(average1) #self.remlabel1.configure(background='yellow') #self.playertogo.set(self.player1name) self.pl2sets.set(player2.stats['sets']) self.pl2legs.set(player2.stats['legs']) self.pl2remaining.set(player2.stats['score']) self.pl260.set(player2.stats['60+']) self.pl280.set(player2.stats['80+']) self.pl2100.set(player2.stats['100+']) self.pl2140.set(player2.stats['140+']) self.pl2180.set(player2.stats['180']) self.pl2avg.set(player2.stats['avg']) numbset2 = ( "%s / %s" % (player2.stats['doubleshit'], player2.stats['dartsatdoubles'])) self.pl2chtnumbs.set(numbset2) #if player2.stats['dartsatdoubles'] == 0: #player2.stats['doubleshit'] = 1 #pc2 = (player2.stats['dartsatdoubles']/player2.stats['doubleshit']) self.pl2chtpc.set(player2.stats['checkoutpc']) average2 = (player2.stats['totalScore'] / player2.stats['numberDarts']) * 3 average2 = round(average2, 2) self.pl2avg.set(average2) self.counter += 1 def who_starts(self, sets, legs): if sets % 2 != 0: if legs % 2 != 0: self.playertogo.set(self.player1name) self.remlabel1.configure(background='yellow') self.remlabel2.configure(background='white') player1.stats['score'] = 501 player2.stats['score'] = 501 game_state.playertogo = 1 else: self.playertogo.set(self.player2name) self.remlabel2.configure(background='yellow') self.remlabel1.configure(background='white') player1.stats['score'] = 501 player2.stats['score'] = 501 game_state.playertogo = 2 else: if legs % 2 != 0: self.playertogo.set(self.player2name) self.remlabel2.configure(background='yellow') self.remlabel1.configure(background='white') player1.stats['score'] = 501 player2.stats['score'] = 501 game_state.playertogo = 2 else: self.playertogo.set(self.player1name) self.remlabel1.configure(background='yellow') self.remlabel2.configure(background='white') player1.stats['score'] = 501 player2.stats['score'] = 501 game_state.playertogo = 1 def score_Entered(self): self.dartsatdouble = StringVar() if self.counter == 1: player1.stats['totalScore'] = 0 player1.stats['numberDarts'] = 0 elif self.counter == 2: player2.stats['totalScore'] = 0 player2.stats['numberDarts'] = 0 self.score = int(self.scoreEntered.get()) if game_state.playertogo == 1: player1.stats['score'] -= self.score player1.stats['totalScore'] += self.score player1.stats['numberDarts'] += 3 player1.status(self.score, player1) self.stats_update(player1, player2) self.playertogo.set(self.player2name) self.remlabel2.configure(background='yellow') self.remlabel1.configure(background='white') if (player1.stats['score'] >= 0) and (player1.stats['score'] < 50): self.dartsAtDouble = Toplevel() Label(self.dartsAtDouble, text="Darts at Double: ").grid(row=1, column=0) self.doubleDarts = Combobox(self.dartsAtDouble, width=5, textvariable=self.dartsatdouble) self.doubleDarts.bind("<<ComboboxSelected>>", self.darts_at_double) self.doubleDarts['values'] = ('0', '1', '2', '3') self.doubleDarts.grid(row=1, column=1) #root.wait_window(darts_at_double) #self.doubleDarts.grid() #self.doubleDarts_label.grid() self.number_entry.delete(0, END) game_state.playertogo = 2 else: player2.stats['score'] -= self.score player2.stats['totalScore'] += self.score player2.stats['numberDarts'] += 3 player2.status(self.score, player2) self.stats_update(player1, player2) self.playertogo.set(self.player1name) self.remlabel1.configure(background='yellow') self.remlabel2.configure(background='white') if (player2.stats['score'] >= 0) and (player2.stats['score'] < 50): self.dartsAtDouble = Toplevel() Label(self.dartsAtDouble, text="Darts at Double: ").grid(row=1, column=0) self.doubleDarts = Combobox(self.dartsAtDouble, width=5, textvariable=self.dartsatdouble) self.doubleDarts.bind("<<ComboboxSelected>>", self.darts_at_double) self.doubleDarts['values'] = ('0', '1', '2', '3') self.doubleDarts.grid(row=1, column=1) self.number_entry.delete(0, END) game_state.playertogo = 1 def darts_at_double(self, player): self.legwondarts = StringVar() self.darts_at_doubles = int(self.dartsatdouble.get()) if player1.stats['score'] == 0: self.legWon = Toplevel() Label(self.legWon, text="Darts Used: ").grid(row=1, column=0) self.leg_won = Combobox(self.legWon, width=5, textvariable=self.legwondarts) self.leg_won.bind("<<ComboboxSelected>>", self.leg_won_darts) self.leg_won['values'] = ('1', '2', '3') self.leg_won.grid(row=1, column=1) elif player2.stats['score'] == 0: self.legWon = Toplevel() Label(self.legWon, text="Darts Used: ").grid(row=1, column=0) self.leg_won = Combobox(self.legWon, width=5, textvariable=self.legwondarts) self.leg_won.bind("<<ComboboxSelected>>", self.leg_won_darts) self.leg_won['values'] = ('1', '2', '3') self.leg_won.grid(row=1, column=1) if game_state.playertogo == 2: player1.stats['dartsatdoubles'] += self.darts_at_doubles else: player2.stats['dartsatdoubles'] += self.darts_at_doubles self.stats_update(player1, player2) self.dartsAtDouble.destroy() def leg_won_darts(self, last_Darts): lastDarts = int(self.legwondarts.get()) if game_state.playertogo == 2: player1.stats['numberDarts'] -= (3 - lastDarts) player1.stats['legs'] += 1 player1.stats['doubleshit'] += 1 player1.stats['checkoutpc'] = round( player1.stats['doubleshit'] / player1.stats['dartsatdoubles'] * 100, 2) game_state.currentlegs += 1 if player1.stats['legs'] == game_state.legs: player1.stats['sets'] += 1 player1.stats['legs'] = 0 player2.stats['legs'] = 0 game_state.currentsets += 1 game_state.currentlegs = 1 self.who_starts(game_state.currentsets, game_state.currentlegs) else: player2.stats['numberDarts'] -= (3 - lastDarts) player2.stats['legs'] += 1 player2.stats['doubleshit'] += 1 player2.stats['checkoutpc'] = round( player2.stats['doubleshit'] / player2.stats['dartsatdoubles'] * 100, 2) game_state.currentlegs += 1 if player2.stats['legs'] == game_state.legs: player2.stats['sets'] += 1 player2.stats['legs'] = 0 player2.stats['legs'] = 0 game_state.currentsets += 1 game_state.currentlegs = 1 self.who_starts(game_state.currentsets, game_state.currentlegs) self.who_starts(game_state.currentsets, game_state.currentlegs) self.stats_update(player1, player2) self.legWon.destroy() print(player1.stats['sets']) print(player2.stats['sets']) print(game_state.sets) if player1.stats['sets'] == game_state.sets: self.game_won() elif player1.stats['sets'] == game_state.sets: self.game_won() def game_won(self): self.gamewonwindow = Toplevel() Label(self.gamewonwindow, text="Totals").grid(row=0, column=0, sticky='w') Label(self.gamewonwindow, text="Sets:").grid(row=1, column=0, sticky='w') Label(self.gamewonwindow, textvariable=self.pl1sets).grid(row=1, column=1) Label(self.gamewonwindow, textvariable=self.pl2sets).grid(row=1, column=2) Label(self.gamewonwindow, text="Legs:").grid(row=2, column=0, sticky='w') Label(self.gamewonwindow, textvariable=self.pl1legs).grid(row=2, column=1) Label(self.gamewonwindow, textvariable=self.pl2legs).grid(row=2, column=2) Label(self.gamewonwindow, text="60+:").grid(row=3, column=0, sticky='w') Label(self.gamewonwindow, textvariable=self.pl160).grid(row=3, column=1) Label(self.gamewonwindow, textvariable=self.pl260).grid(row=3, column=2) Label(self.gamewonwindow, text="80+:").grid(row=4, column=0, sticky='w') Label(self.gamewonwindow, textvariable=self.pl180).grid(row=4, column=1) Label(self.gamewonwindow, textvariable=self.pl280).grid(row=4, column=2) Label(self.gamewonwindow, text="100+:").grid(row=5, column=0, sticky='w') Label(self.gamewonwindow, textvariable=self.pl1100).grid(row=5, column=1) Label(self.gamewonwindow, textvariable=self.pl2100).grid(row=5, column=2) Label(self.gamewonwindow, text="140+:").grid(row=6, column=0, sticky='w') Label(self.gamewonwindow, textvariable=self.pl1140).grid(row=6, column=1) Label(self.gamewonwindow, textvariable=self.pl2140).grid(row=6, column=2) Label(self.gamewonwindow, text="180:").grid(row=7, column=0, sticky='w') Label(self.gamewonwindow, textvariable=self.pl1180).grid(row=7, column=1) Label(self.gamewonwindow, textvariable=self.pl2180).grid(row=7, column=2) Label(self.gamewonwindow, text="Averages").grid(row=8, column=0, sticky='w') Label(self.gamewonwindow, text="Score:").grid(row=9, column=0, sticky='w') Label(self.gamewonwindow, textvariable=self.pl1avg).grid(row=9, column=1) Label(self.gamewonwindow, textvariable=self.pl2avg).grid(row=9, column=2) Label(self.gamewonwindow, text="Checkout %:").grid(row=10, column=0, sticky='w') Label(self.gamewonwindow, textvariable=self.pl1chtpc).grid(row=10, column=1) Label(self.gamewonwindow, textvariable=self.pl2chtpc).grid(row=10, column=2) Label(self.gamewonwindow, text="Checkout Hit/Thrown:").grid(row=11, column=0, sticky='w') Label(self.gamewonwindow, textvariable=self.pl1chtnumbs).grid(row=11, column=1) Label(self.gamewonwindow, textvariable=self.pl2chtnumbs).grid(row=11, column=2)
class MyFrame(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.LCD = None #Loan calculator object self.FBD = None #Feedback Dlg object self.initUI() def initUI(self): self.parent.title("GUI Controls Test") self.style = Style() self.style.theme_use("default") self.pack(fill=BOTH, expand=1) #-------------------------------------------- #--------------------create menus------------ menuBar = Menu(self.parent) mnuFile = Menu(menuBar, tearoff=0) menuBar.add_cascade(label="File", menu=mnuFile) mnuFile.add_command(label="Open", command=self.mnuOpenFileClick) mnuFile.add_command(label="Save", command=self.mnuSaveFileClick) mnuFile.add_separator() mnuFile.add_command(label="Exit", command=self.exitButtonClick) mnuCustomers = Menu(menuBar, tearoff=0) menuBar.add_cascade(label="Loan Processing", menu=mnuCustomers) mnuCustomers.add_command(label="Loan Calculator", command=self.loanCalcButtonClick) mnuCustomers.add_separator() mnuCustomers.add_command(label="Provide Feedback", command=self.mnuShowFeedbackClick) self.parent.config(menu=menuBar) #-------------------------------------------- xpos = 30 ypos = 40 xpos2 = xpos + 90 #------------styling---------------------------------- style = Style() style.configure("Exit.TButton", foreground="red", background="white") style.configure("MainButton.TButton", foreground="yellow", background="red") #----------------------------------------------------- testButton = Button(self, text="Get StudentID", command=self.btnGetStudentIDClick) testButton.configure(style="MainButton.TButton") testButton.place(x=xpos, y=ypos) self.txtID = Entry(self, text="", foreground="#ff0000", background="light blue", font="Arial 9") # Arial 12 bold italic self.txtID.place(x=xpos2, y=ypos) self.txtID.configure(state="readonly") ypos += 30 btnLoanCalc = Button(self, text="Loan Calculator", command=self.loanCalcButtonClick) btnLoanCalc.configure(style="Exit.TButton") btnLoanCalc.place(x=xpos, y=ypos) ypos += 30 exitButton = Button(self, text="Exit", command=self.exitButtonClick) exitButton.configure(style="Exit.TButton") exitButton.place(x=xpos, y=ypos) def exitButtonClick(self): if (messagebox.askokcancel("OK to close?", "Close application?")): self.parent.destroy exit() # needed to close the main frame def btnGetStudentIDClick(self): #show modal dialog and collect student ID dlg = StudentIDDlg("your ID", "Student ID?", "Please Enter your Student ID:") dlg.grab_set() #events only go to the modal dialog self.wait_window(dlg) self.txtID.configure(state="normal") self.txtID.delete(0, END) self.txtID.insert(0, dlg.getID()) self.txtID.configure(state="readonly") print(dlg.getID()) def loanCalcButtonClick(self): if (self.LCD is None): self.LCD = LoanCalculator() else: if (self.LCD.winfo_exists()): self.LCD.focus() else: self.LCD = LoanCalculator() def loanCalcButtonClick(self): if (self.LCD is None): self.LCD = LoanCalculator() else: if (self.LCD.winfo_exists()): self.LCD.focus() else: self.LCD = LoanCalculator() def mnuOpenFileClick(self): options = opts = {} opts['initialdir'] = 'd:\\PythonRM' opts['filetypes'] = [('all files', '.*'), ('jpeg files', '.jpg')] fname = filedialog.askopenfilename(**options) # file in read mode img = cv2.imread(fname) # read the image file cv2.imshow('image', img) #toimage(img).show() def mnuSaveFileClick(self): print("OK2") def mnuShowFeedbackClick(self): if (self.FBD is None): self.FBD = FeedBackDlg() else: if (self.FBD.winfo_exists()): self.LCD.focus() else: self.FBD = FeedBackDlg()
class ProofSelector: def __init__(self, frame, proof=None): self.frame = frame self.proof = proof self.active = True self.modified = False self.init_ui() if self.proof: self.fill_proof() def init_ui(self): self.frame_single_proof = Frame(self.frame, bg='white') self.frame_single_proof.pack(side=TOP, fill=X) self.filepath_value = StringVar() self.entry_filepath = Entry(self.frame_single_proof, textvariable=self.filepath_value) self.entry_filepath.pack(side=LEFT, expand=True, fill=X) if self.proof: self.entry_filepath.configure(state='readonly') bttn_select_file = Button(self.frame_single_proof, text="Add File", command=self.select_file) bttn_select_file.pack(side=LEFT) bttn_delette_file = Button(self.frame_single_proof, text="Delete File", command=self.delete_file) bttn_delette_file.pack(side=LEFT) def fill_proof(self): self.filepath_value.set(self.proof.path) def select_file(self): file_path = filedialog.askopenfilename(parent=self.frame, initialdir="/", title="Select file") # filetypes=(("jpeg files", "*.jpg"), ("all files", "*.*"))) if file_path: file_ext = os.path.splitext(file_path)[1] if file_ext in (".txt", ".sh", ".py"): proof_type = db.get_proof_type_by_name('text') elif file_ext in (".png", ".jpeg", ".gif"): proof_type = db.get_proof_type_by_name('image') else: messagebox.showerror( "Extension Error", "the file extension {} is not suported, sorry :(".format( file_ext)) return if self.proof: self.proof.path = file_path self.proof.type = proof_type self.modified = True else: new_proof = Proof(path=file_path, type=proof_type) self.proof = new_proof self.filepath_value.set(self.proof.path) else: messagebox.showinfo('Info', 'No folder was selected') def delete_file(self): if self.proof or self.modified: db.delete(self.proof) self.active = False self.frame_single_proof.destroy()
class MainApplication(Frame): def __init__(self, master): self.master = master tabControl = Notebook(self.master) self.tab1 = Frame(tabControl) tabControl.add(self.tab1, text='501') #tabControl.pack(expand=1, fill="both") tab2 = Frame(tabControl) tabControl.add(tab2, text='Round The Board') tabControl.pack(expand=1, fill="both") self.configure_gui() self.create_widgets() self.start_window() def configure_gui(self): self.master.title("501") self.master.geometry("600x500") # function binding return key to entry box self.master.bind('<Return>', lambda e: self.score_Entered()) #create frames self.labFrame1 = LabelFrame(self.tab1, text="Player1 Stats") self.labFrame2 = LabelFrame(self.tab1, text="Player2 Stats") self.labFrame3 = LabelFrame(self.tab1, text="Player1 Scores") self.labFrame4 = LabelFrame(self.tab1, text="Player2 Scores") self.labFrame5 = LabelFrame(self.tab1, text="Enter Scores") #self.labFrame6 = LabelFrame(self.master, text="Additional info") #make frames vis(ible self.labFrame1.grid(row=0, column=0, rowspan=2, sticky='ns') self.labFrame3.grid(row=0, column=1) self.labFrame4.grid(row=0, column=2) self.labFrame2.grid(row=0, column=3, rowspan=2, sticky='ns') self.labFrame5.grid(row=1, column=1, columnspan=2, sticky='ew') #self.labFrame6.grid(row=3, column=1, columnspan=2, sticky='ew') def create_widgets(self): self.pl1name = StringVar() self.pl2name = StringVar() self.pl1sets = StringVar() self.pl1legs = StringVar() self.pl160 = StringVar() self.pl180 = StringVar() self.pl1100 = StringVar() self.pl1140 = StringVar() self.pl1180 = StringVar() self.pl1avg = StringVar() self.pl1chtpc = StringVar() self.pl1chtnumbs = StringVar() #player to go boolean self.player1_togo = True #frame 1 widgets Label(self.labFrame1, text="Totals").grid(row=0, column=0, sticky='w') Label(self.labFrame1, text="Sets:").grid(row=1, column=0, sticky='w') Label(self.labFrame1, textvariable=self.pl1sets).grid(row=1, column=1) Label(self.labFrame1, text="Legs:").grid(row=2, column=0, sticky='w') Label(self.labFrame1, textvariable=self.pl1legs).grid(row=2, column=1) Label(self.labFrame1, text="60+:").grid(row=3, column=0, sticky='w') Label(self.labFrame1, textvariable=self.pl160).grid(row=3, column=1) Label(self.labFrame1, text="80+:").grid(row=4, column=0, sticky='w') Label(self.labFrame1, textvariable=self.pl180).grid(row=4, column=1) Label(self.labFrame1, text="100+:").grid(row=5, column=0, sticky='w') Label(self.labFrame1, textvariable=self.pl1100).grid(row=5, column=1) Label(self.labFrame1, text="140+:").grid(row=6, column=0, sticky='w') Label(self.labFrame1, textvariable=self.pl1140).grid(row=6, column=1) Label(self.labFrame1, text="180:").grid(row=7, column=0, sticky='w') Label(self.labFrame1, textvariable=self.pl1180).grid(row=7, column=1) Label(self.labFrame1, text="Averages").grid(row=8, column=0, sticky='w') Label(self.labFrame1, text="Score:").grid(row=9, column=0, sticky='w') Label(self.labFrame1, textvariable=self.pl1avg).grid(row=9, column=1) Label(self.labFrame1, text="Checkout %:").grid(row=10, column=0, sticky='w') Label(self.labFrame1, textvariable=self.pl1chtpc).grid(row=10, column=1) Label(self.labFrame1, text="Checkout Hit/Thrown:").grid(row=11, column=0, sticky='w') Label(self.labFrame1, textvariable=self.pl1chtnumbs).grid(row=11, column=1) self.pl2sets = StringVar() self.pl2legs = StringVar() self.pl260 = StringVar() self.pl280 = StringVar() self.pl2100 = StringVar() self.pl2140 = StringVar() self.pl2180 = StringVar() self.pl2avg = StringVar() self.pl2chtpc = StringVar() self.pl2chtnumbs = StringVar() #frame 2 widgets Label(self.labFrame2, text="Totals").grid(row=0, column=0, sticky='w') Label(self.labFrame2, text="Sets:").grid(row=1, column=0, sticky='w') Label(self.labFrame2, textvariable=self.pl2sets).grid(row=1, column=1) Label(self.labFrame2, text="Legs:").grid(row=2, column=0, sticky='w') Label(self.labFrame2, textvariable=self.pl2legs).grid(row=2, column=1) Label(self.labFrame2, text="60+:").grid(row=3, column=0, sticky='w') Label(self.labFrame2, textvariable=self.pl260).grid(row=3, column=1) Label(self.labFrame2, text="80+:").grid(row=4, column=0, sticky='w') Label(self.labFrame2, textvariable=self.pl280).grid(row=4, column=1) Label(self.labFrame2, text="100+:").grid(row=5, column=0, sticky='w') Label(self.labFrame2, textvariable=self.pl2100).grid(row=5, column=1) Label(self.labFrame2, text="140+:").grid(row=6, column=0, sticky='w') Label(self.labFrame2, textvariable=self.pl2140).grid(row=6, column=1) Label(self.labFrame2, text="180:").grid(row=7, column=0, sticky='w') Label(self.labFrame2, textvariable=self.pl2180).grid(row=7, column=1) Label(self.labFrame2, text="Averages").grid(row=8, column=0, sticky='w') Label(self.labFrame2, text="Score:").grid(row=9, column=0, sticky='w') Label(self.labFrame2, textvariable=self.pl2avg).grid(row=9, column=1) Label(self.labFrame2, text="Checkout %:").grid(row=10, column=0, sticky='w') Label(self.labFrame2, textvariable=self.pl2chtpc).grid(row=10, column=1) Label(self.labFrame2, text="Checkout Hit/Thrown:").grid(row=11, column=0, sticky='w') Label(self.labFrame2, textvariable=self.pl2chtnumbs).grid(row=11, column=1) #frame 3 widgets self.pl1remaining = StringVar() Label(self.labFrame3, text="Player:").grid(row=0, column=0) Label(self.labFrame3, textvariable=self.pl1name).grid(row=0, column=1) Label(self.labFrame3).grid(row=1) Label(self.labFrame3, text="Remaining").grid(row=2, column=0, columnspan=2, sticky='ew') self.remlabel1 = Label(self.labFrame3, textvariable=self.pl1remaining) self.remlabel1.grid(row=3, column=0, columnspan=2) self.remlabel1.configure(width=3, background='white', font=(None, 35)) #self.pl1remaining.set(self.pl1dict['score']) #self.pl1name.set(game_state.player1) #frame 4 widgets self.pl2remaining = StringVar() Label(self.labFrame4, text="Player:").grid(row=0, column=0) Label(self.labFrame4, textvariable=self.pl2name).grid(row=0, column=1) Label(self.labFrame4).grid(row=1) Label(self.labFrame4, text="Remaining").grid(row=2, column=0, columnspan=2, sticky='ew') self.remlabel2 = Label(self.labFrame4, textvariable=self.pl2remaining) self.remlabel2.grid(row=3, column=0, columnspan=2) self.remlabel2.configure(width=3, background='white', font=(None, 35)) #self.pl2remaining.set(self.pl2dict['score']) #self.pl2name.set(game_state.player2) #frame 5 widgets self.playertogo = StringVar() self.scoreEntered = StringVar() Label(self.labFrame5, text=" ").grid(row=0, column=0) #Label(labFrame5).grid(row=0, column=1) #Label(labFrame5).grid(row=0, column=2) Label(self.labFrame5, text="To Go:").grid(row=1, column=1) playerLabel = Label(self.labFrame5, textvariable=self.playertogo) playerLabel.grid(row=2, column=1) playerLabel.configure(font=(None, 20)) self.number_entry = Entry(self.labFrame5, textvariable=self.scoreEntered, width=5) self.number_entry.grid(row=2, column=2) self.number_entry.configure(background='white', font=(None, 20)) self.number_entry.focus() def start_window(self): self.startWindow = Toplevel(self.master) self.ply1entry = StringVar() self.ply2entry = StringVar() self.setsentry = StringVar() self.legsentry = StringVar() self.ply1Label = Label(self.startWindow, text="Player 1:") self.ply1Label.grid(row=3, column=3) self.ply1Entry = Entry(self.startWindow, textvariable=self.ply1entry, width=10) self.ply1Entry.grid(row=3, column=4, sticky='e') self.ply2Label = Label(self.startWindow, text="Player 2:") self.ply2Label.grid(row=4, column=3) self.ply2Entry = Entry(self.startWindow, textvariable=self.ply2entry, width=10) self.ply2Entry.grid(row=4, column=4, sticky='e') self.setsLabel = Label(self.startWindow, text="Number of Sets:") self.setsLabel.grid(row=5, column=3) self.setsBox = Combobox(self.startWindow, textvariable=self.setsentry, width=5) self.setsBox['values'] = (1, 3, 5, 7, 9) self.setsBox.current(1) self.setsBox.grid(row=5, column=4) self.legsLabel = Label(self.startWindow, text="Number of Legs:") self.legsLabel.grid(row=6, column=3) self.legsBox = Combobox(self.startWindow, textvariable=self.legsentry, width=5) self.legsBox['values'] = (1, 3, 5, 7, 9) self.legsBox.current(2) self.legsBox.grid(row=6, column=4) self.plyButton = Button(self.startWindow, text="Start Game", command=self.fiveohone_start) self.plyButton.grid(row=7, column=4) root.wait_window(self.startWindow) def fiveohone_start(self): player1name = self.ply1entry.get() player2name = self.ply2entry.get() numbersets = int(self.setsentry.get()) numberlegs = int(self.legsentry.get()) self.startWindow.destroy() def stats_update(self, player1, player2): self.pl1sets.set(player1.stats['sets']) self.pl1legs.set(player1.stats['legs']) self.pl1remaining.set(player1.stats['score']) self.pl160.set(player1.stats['60+']) self.pl180.set(player1.stats['80+']) self.pl1100.set(player1.stats['100+']) self.pl1140.set(player1.stats['140+']) self.pl1180.set(player1.stats['180']) numbset = ( "%s / %s" % (player1.stats['dartsatdoubles'], player1.stats['doubleshit'])) self.pl1chtnumbs.set(numbset) average1 = (player1.stats['totalScore'] / player1.stats['numberDarts']) * 3 average1 = round(average1, 2) self.pl1avg.set(average1) #self.remlabel1.configure(background='yellow') #self.playertogo.set(self.player1name) self.pl2sets.set(player2.stats['sets']) self.pl2legs.set(player2.stats['legs']) self.pl2remaining.set(player2.stats['score']) self.pl260.set(player2.stats['60+']) self.pl280.set(player2.stats['80+']) self.pl2100.set(player2.stats['100+']) self.pl2140.set(player2.stats['140+']) self.pl2180.set(player2.stats['180']) self.pl2avg.set(player2.stats['avg']) numbset2 = ( "%s / %s" % (player2.stats['dartsatdoubles'], player2.stats['doubleshit'])) self.pl2chtnumbs.set(numbset2) average2 = (player2.stats['totalScore'] / player2.stats['numberDarts']) * 3 average2 = round(average2, 2) self.pl2avg.set(average2) self.counter += 1 def who_starts(self, sets, legs): if sets % 2 != 0: if legs % 2 != 0: self.playertogo.set(self.player1name) self.remlabel1.configure(background='yellow') self.remlabel2.configure(background='white') game_state.playertogo = 1 else: self.playertogo.set(self.player2name) self.remlabel2.configure(background='yellow') self.remlabel1.configure(background='white') game_state.playertogo = 2 def score_Entered(self): if self.counter == 1: player1.stats['totalScore'] = 0 player1.stats['numberDarts'] = 0 elif self.counter == 2: player2.stats['totalScore'] = 0 player2.stats['numberDarts'] = 0 self.score = int(self.scoreEntered.get()) if game_state.playertogo == 1: player1.stats['score'] -= self.score player1.stats['totalScore'] += self.score player1.stats['numberDarts'] += 3 player1.status(self.score, player1) self.stats_update(player1, player2) self.playertogo.set(self.player2name) self.remlabel2.configure(background='yellow') self.remlabel1.configure(background='white') if (player1.stats['score'] > 0) and (player1.stats['score'] < 50): darts_at_double = Toplevel() self.doubleDarts = Combobox(darts_at_double, width=5, textvariable=self.dartsatdouble) self.doubleDarts.bind("<<ComboboxSelected>>", self.darts_at_double) self.doubleDarts['values'] = ('1', '2', '3') self.doubleDarts.grid(row=1, column=1) main_app.wait_window(darts_at_double) #self.doubleDarts.grid() #self.doubleDarts_label.grid() self.number_entry.delete(0, END) game_state.playertogo = 2 else: player2.stats['score'] -= self.score player2.stats['totalScore'] += self.score player2.stats['numberDarts'] += 3 player2.status(self.score, player2) self.stats_update(player1, player2) self.playertogo.set(self.player1name) self.remlabel1.configure(background='yellow') self.remlabel2.configure(background='white') self.number_entry.delete(0, END) game_state.playertogo = 1 def darts_at_double(self, player): self.darts_at_doubles = int(self.dartsatdouble.get()) if game_state.playertogo == 2: player1.stats['dartsatdoubles'] += self.darts_at_doubles self.stats_update(player1, player2) self.doubleDarts.grid_remove() self.doubleDarts_label.grid_remove() def leg_won_darts(self): pass
class fiveOhOne: def __init__(self, master): self.master = master self.frame = Frame(self.master) self.configure_gui1() def configure_gui1(self): self.master.title("501") self.master.geometry("800x600") # function binding return key to entry box self.master.bind('<Return>', lambda e: self.score_Entered()) #create menu def callback(): print("called the callback!") # create a menu menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="New", command=callback) filemenu.add_command(label="Open...", command=callback) filemenu.add_separator() filemenu.add_command(label="Exit", command=callback) helpmenu = Menu(menu) menu.add_cascade(label="Help", menu=helpmenu) helpmenu.add_command(label="About...", command=callback) #create frames labFrame1 = LabelFrame(self.master, text="Player1 Stats") labFrame2 = LabelFrame(self.master, text="Player2 Stats") labFrame3 = LabelFrame(self.master, text="Player1 Scores") labFrame4 = LabelFrame(self.master, text="Player2 Scores") labFrame5 = LabelFrame(self.master, text="Enter Scores") """ #make frames visible using grid labFrame1.grid(row=0, column=0, rowspan=2, sticky='ew') labFrame3.grid(row=0, column=1, sticky='ew') labFrame4.grid(row=0, column=2, sticky='ew') labFrame2.grid(row=0, column=3, rowspan=2, sticky='ew') labFrame5.grid(row=1, column=1, columnspan=2, sticky='ew') """ #make frames visible using pack labFrame1.pack(side="left", fill="both", expand=True) labFrame2.pack(side="right", fill="both", expand=True) labFrame5.pack(side="bottom", fill="x", expand=True) labFrame3.pack(side="left", fill="both", expand=True) labFrame4.pack(side="right", fill="both", expand=True) #stringvars self.pl1name = StringVar() self.pl2name = StringVar() self.pl1sets = StringVar() self.pl1legs = StringVar() self.pl160 = StringVar() self.pl180 = StringVar() self.pl1100 = StringVar() self.pl1140 = StringVar() self.pl1180 = StringVar() self.pl1avg = StringVar() self.pl1chtpc = StringVar() self.pl1chtnumbs = StringVar() #player to go boolean self.player1_togo = True #frame 1 widgets Label(labFrame1, text="Totals").grid(row=0, column=0, sticky='w') Label(labFrame1, text="Sets:").grid(row=1, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1sets).grid(row=1, column=1) Label(labFrame1, text="Legs:").grid(row=2, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1legs).grid(row=2, column=1) Label(labFrame1, text="60+:").grid(row=3, column=0, sticky='w') Label(labFrame1, textvariable=self.pl160).grid(row=3, column=1) Label(labFrame1, text="80+:").grid(row=4, column=0, sticky='w') Label(labFrame1, textvariable=self.pl180).grid(row=4, column=1) Label(labFrame1, text="100+:").grid(row=5, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1100).grid(row=5, column=1) Label(labFrame1, text="140+:").grid(row=6, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1140).grid(row=6, column=1) Label(labFrame1, text="180:").grid(row=7, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1180).grid(row=7, column=1) Label(labFrame1, text="Averages").grid(row=8, column=0, sticky='w') Label(labFrame1, text="Score:").grid(row=9, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1avg).grid(row=9, column=1) Label(labFrame1, text="Checkout %:").grid(row=10, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1chtpc).grid(row=10, column=1) Label(labFrame1, text="Checkout Hit/Thrown:").grid(row=11, column=0, sticky='w') Label(labFrame1, textvariable=self.pl1chtnumbs).grid(row=11, column=1) #stringvars self.pl2sets = StringVar() self.pl2legs = StringVar() self.pl260 = StringVar() self.pl280 = StringVar() self.pl2100 = StringVar() self.pl2140 = StringVar() self.pl2180 = StringVar() self.pl2avg = StringVar() self.pl2chtpc = StringVar() self.pl2chtnumbs = StringVar() #frame 2 widgets Label(labFrame2, text="Totals").grid(row=0, column=0, sticky='w') Label(labFrame2, text="Sets:").grid(row=1, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2sets).grid(row=1, column=1) Label(labFrame2, text="Legs:").grid(row=2, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2legs).grid(row=2, column=1) Label(labFrame2, text="60+:").grid(row=3, column=0, sticky='w') Label(labFrame2, textvariable=self.pl260).grid(row=3, column=1) Label(labFrame2, text="80+:").grid(row=4, column=0, sticky='w') Label(labFrame2, textvariable=self.pl280).grid(row=4, column=1) Label(labFrame2, text="100+:").grid(row=5, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2100).grid(row=5, column=1) Label(labFrame2, text="140+:").grid(row=6, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2140).grid(row=6, column=1) Label(labFrame2, text="180:").grid(row=7, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2180).grid(row=7, column=1) Label(labFrame2, text="Averages").grid(row=8, column=0, sticky='w') Label(labFrame2, text="Score:").grid(row=9, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2avg).grid(row=9, column=1) Label(labFrame2, text="Checkout %:").grid(row=10, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2chtpc).grid(row=10, column=1) Label(labFrame2, text="Checkout Hit/Thrown:").grid(row=11, column=0, sticky='w') Label(labFrame2, textvariable=self.pl2chtnumbs).grid(row=11, column=1) #frame 3 widgets self.pl1remaining = StringVar() Label(labFrame3, text="Player:").grid(row=0, column=0) Label(labFrame3, textvariable=self.pl1name).grid(row=0, column=1) Label(labFrame3).grid(row=1) Label(labFrame3, text="Remaining").grid(row=2, column=0, columnspan=2, sticky='ew') self.remlabel1 = Label(labFrame3, textvariable=self.pl1remaining) self.remlabel1.grid(row=3, column=0, columnspan=2) self.remlabel1.configure(width=3, background='white', font=(None, 35)) #self.pl1remaining.set(self.pl1dict['score']) #self.pl1name.set(game_state.player1) #frame 4 widgets self.pl2remaining = StringVar() Label(labFrame4, text="Player:").grid(row=0, column=0) Label(labFrame4, textvariable=self.pl2name).grid(row=0, column=1) Label(labFrame4).grid(row=1) Label(labFrame4, text="Remaining").grid(row=2, column=0, columnspan=2, sticky='ew') self.remlabel2 = Label(labFrame4, textvariable=self.pl2remaining) self.remlabel2.grid(row=3, column=0, columnspan=2) self.remlabel2.configure(width=3, background='white', font=(None, 35)) #self.pl2remaining.set(self.pl2dict['score']) #self.pl2name.set(game_state.player2) #frame 5 widgets self.playertogo = StringVar() self.scoreEntered = StringVar() Label(labFrame5, text=" ").grid(row=0, column=0) #Label(labFrame5).grid(row=0, column=1) #Label(labFrame5).grid(row=0, column=2) Label(labFrame5, text="To Go:").grid(row=1, column=1) playerLabel = Label(labFrame5, textvariable=self.playertogo) playerLabel.grid(row=2, column=1) playerLabel.configure(font=(None, 20)) self.number_entry = Entry(labFrame5, textvariable=self.scoreEntered, width=5) self.number_entry.grid(row=2, column=2) self.number_entry.configure(background='white', font=(None, 20)) self.number_entry.focus()
class LoanCalculator(Toplevel): def __init__(self): Toplevel.__init__(self) self.initUI() def initUI(self): self.title("Loan Calculator") self.geometry("300x300") self.style = Style() self.style.theme_use("default") # default #self.pack(fill=BOTH, expand=1) xpos = 40 ypos = 30 xpos2 = xpos + 100 l1 = Label(self, text="Amount", foreground="#ff0000", background="light blue", font="Arial 9") # Arial 12 bold italic l1.place(x=xpos, y=ypos) self.txtAmount = Entry(self) self.txtAmount.place(x=xpos2, y=ypos, width=70) ypos += 30 l2 = Label(self, text="Rate(%)", foreground="#ff0000", background="light blue", font="Arial 9") # Arial 12 bold italic l2.place(x=xpos, y=ypos) self.txtRate = Entry(self) self.txtRate.place(x=xpos2, y=ypos) ypos += 30 l3 = Label(self, text="Duration(months)", foreground="#ff0000", background="light blue", font="Arial 9") # Arial 12 bold italic l3.place(x=xpos, y=ypos) self.txtDuration = Entry(self) self.txtDuration.place(x=xpos2, y=ypos) ypos += 30 l4 = Label(self, text="Monthly Payment", foreground="#ff0000", background="yellow", font="Arial 9") # Arial 12 bold italic l4.place(x=xpos, y=ypos) self.txtMonthlyPayment = Entry(self) self.txtMonthlyPayment.configure(state="readonly") self.txtMonthlyPayment.place(x=xpos2, y=ypos) ypos += 30 l5 = Label(self, text="Total Payments", foreground="#ff0000", background="yellow", font="Arial 9") # Arial 12 bold italic l5.place(x=xpos, y=ypos) self.txtTotalPayment = Entry(self) self.txtTotalPayment.configure(state="readonly") self.txtTotalPayment.place(x=xpos2, y=ypos) ypos += 30 style = Style() style.configure("Exit.TButton", foreground="red", background="white") #T.Checkbutton for checboxes style.configure("MainButton.TButton", foreground="yellow", background="red") exitButton = Button(self, text="Exit", command=self.exitButtonClick) exitButton.configure(style="Exit.TButton") exitButton.place(x=xpos, y=ypos) calcButton = Button(self, text="Calculate", command=self.calcButtonClick) calcButton.configure(style="MainButton.TButton") calcButton.place(x=xpos2, y=ypos) def exitButtonClick(self): if (messagebox.askokcancel("OK to close?", "Close aapplication?")): self.parent.destroy exit() # needed to close the main frame def calcButtonClick(self): amt = float(self.txtAmount.get()) rate = float(self.txtRate.get()) dur = float(self.txtDuration.get()) monthlyPayment = amt * (rate / 1200.0) * ((rate / 1200 + 1)**dur) / (( (rate / 1200 + 1)**dur) - 1) totalPayment = amt * ((1 + rate / 1200)**dur) self.txtMonthlyPayment.configure( state="normal" ) # has to be turned back to normal otherwise, data is not modified self.txtMonthlyPayment.delete(0, END) self.txtMonthlyPayment.insert(0, format(monthlyPayment, "0.2f")) self.txtMonthlyPayment.configure(state="readonly") self.txtTotalPayment.configure(state="normal") self.txtTotalPayment.delete(0, END) self.txtTotalPayment.insert(0, format(totalPayment, "0.2f")) self.txtTotalPayment.configure(state="readonly")