Пример #1
0
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")))
Пример #2
0
 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="")
Пример #3
0
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
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
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)
Пример #7
0
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()
Пример #8
0
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',
                    'Мы заметили, что вы выбрали неверный адрес!'
                )
Пример #9
0
    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')))
Пример #10
0
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
Пример #11
0
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()
Пример #12
0
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
Пример #13
0
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()
Пример #14
0
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)
Пример #15
0
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()
Пример #16
0
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()
Пример #17
0
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
Пример #18
0
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()
Пример #19
0
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")