Beispiel #1
0
    def show(self, **options):

        # update instance options
        for k, v in options.items():
            self.options[k] = v

        self._fixoptions()

        # we need a dummy widget to properly process the options
        # (at least as long as we use Tkinter 1.63)
        w = Frame(self.master)

        try:

            s = w.tk.call(self.command, *w._options(self.options))

            s = self._fixresult(w, s)

        finally:

            try:
                # get rid of the widget
                w.destroy()
            except:
                pass

        return s
Beispiel #2
0
    def go_action(self, actions):
        """
        execute the action script
        :param actions:
        :return:
        """
        # hide the menu and show a delay screen
        self.hide_top()
        delay = Frame(self, bg="#2d89ef")
        delay.pack(fill=TkC.BOTH, expand=1)
        label = Label(delay,
                      text="Executing...",
                      fg="white",
                      bg="#2d89ef",
                      font="Sans 30")
        label.pack(fill=TkC.BOTH, expand=1)
        self.parent.update()

        # excute shell script
        subprocess.call([self.path + '/pimenu.sh'] + actions)

        # remove delay screen and show menu again
        delay.destroy()
        self.destroy_all()
        self.show_top()
Beispiel #3
0
class ChoosingModePanel:
    def __init__(self, root, switch_mode):
        self.choosing_frame = Frame \
            (root, height=60, width=100, bg='lightblue')
        self.var = IntVar()
        rbutton1 = Radiobutton(self.choosing_frame,
                               text='PvE',
                               variable=self.var,
                               value=1,
                               bg='lightblue')
        rbutton2 = Radiobutton(self.choosing_frame,
                               text='PvP',
                               variable=self.var,
                               value=2,
                               bg='lightblue')
        rbutton3 = Radiobutton(self.choosing_frame,
                               text='EvE',
                               variable=self.var,
                               value=3,
                               bg='lightblue')
        button = Button(self.choosing_frame, text='Ok', bg='lightblue')
        rbutton1.select()
        rbutton1.pack(side='left')
        rbutton2.pack(side='left')
        rbutton3.pack(side='left')
        button.pack(side='left')
        button.bind('<1>', switch_mode)

    def show(self):
        self.choosing_frame.grid()

    def destroy(self):
        self.choosing_frame.destroy()
Beispiel #4
0
class _RowFrame(Frame):
    def __init__(self, master, maxrow, **kw):
        super().__init__(master, **kw)
        self.maxrow = maxrow
        self.saved = True
        self.variables = []
        self._build_dataframe()

    def _build_dataframe(self):
        lkw = dict(bd=1, relief="ridge", font=("Times New Roman", 14))
        gkw = dict(row=0, sticky="news")
        self.dataframe = Frame(self)
        self.dataframe.pack(side="right", **pkw)
        Label(self.dataframe, text="Mért érték", width=15,
              **lkw).grid(column=0, **gkw)
        Label(self.dataframe, text="Mérés dátuma", width=15,
              **lkw).grid(column=1, **gkw)
        Label(self.dataframe, text="Megjegyzés", width=30,
              **lkw).grid(column=2, **gkw)

    def display(self, values=(), dates=(), comments=(), datenow=True):
        self.reset()
        assert len(values) == len(dates)
        assert len(values) <= self.maxrow
        self.add_rows(values, dates, comments)
        self.add_empties(self.maxrow - len(values), datenow)

    def add_rows(self, values, dates, comments):
        for value, date, comment in zip(values, dates, comments):
            self.variables += [(StringVar(value=value), StringVar(value=date),
                                StringVar(value=comment))]
            self.variables[-1][0].trace("w", self.varchange)
            self.variables[-1][1].trace("w", self.varchange)
            self.variables[-1][2].trace("w", self.varchange)
        self.update_rows()

    def add_empties(self, N, datenow=True):
        datefill = datefmt(datetime.datetime.now()) if datenow else ""
        self.add_rows(values=("" for _ in range(N)),
                      dates=(datefill for _ in range(N)),
                      comments=("" for _ in range(N)))

    def update_rows(self):
        self.dataframe.destroy()
        self._build_dataframe()
        for rown, (vvar, dvar, cvar) in enumerate(self.variables, start=1):
            ve = Entry(self.dataframe, textvariable=vvar)
            ve.grid(row=rown, column=0, sticky="news")
            de = Entry(self.dataframe, textvariable=dvar)
            de.grid(row=rown, column=1, sticky="news")
            ce = Entry(self.dataframe, textvariable=cvar)
            ce.grid(row=rown, column=2, sticky="news")

    def reset(self):
        self.variables = []
        self.update_rows()

    # noinspection PyUnusedLocal
    def varchange(self, *args):
        self.saved = False
Beispiel #5
0
 def new_board(self, board=None, difficulty='easy'):
     self.game = SudokuGame(board, difficulty)
     self.game.start()
     self.row, self.col = -1, -1
     Frame.destroy(self)
     Frame.__init__(self, self.parent)
     self.__initUI()
Beispiel #6
0
class ChoosePlayerDialog(Toplevel):
    """Dialog used to prompt the user to choose a player."""
    def __init__(self, program: GUIProgram):
        super(ChoosePlayerDialog, self).__init__(program.app)
        self.title('Choose Player')
        self.program = program
        self.body = Frame(self)
        self.initial_focus = self.body
        self.body.pack()
        self.create_widgets()
        self.initial_focus.focus_set()
        # If this window is closed, terminate the application.
        self.wm_protocol('WM_DELETE_WINDOW', self.on_close)

    def create_widgets(self):
        """Generate the label and buttons to prompt the user for a player."""
        Label(self.body, text='Choose your player:').pack()
        for player in Player:
            Button(self.body, text=player,
                   command=partial(self.click_handler, player),
                   **GUIProgram.standard_button_dimensions).pack()

    def click_handler(self, player: Player):
        """Callback used to call back into the main program to handle the
        player choice.  Once complete, the dialog is closed.
        """
        self.program.handle_player_choice(player)
        self.body.destroy()
        self.destroy()

    def on_close(self):
        """Callback used to terminate the application if closed."""
        self.program.window.quit()
Beispiel #7
0
class Widget_:

	def __init__(self, parent_frame, row, column, width=50, height=50):
		self.widget_frame = Frame(parent_frame, width=width, height=height)
		self.widget_frame.grid(row=row, column=column)
		self.width, self.height = width, height
		return

	def add_tag(self, tag_library, string):
		tag_library[string] = self

	def delete_widget(self):
		for child in self.widget_frame.winfo_children():
			child.destroy()
		self.widget_frame.destroy()

	def hide_widget(self):
		self.widget_frame.grid_forget()

	def get_info(self):
		return

	def set_field(self):
		return

	pass
Beispiel #8
0
    class Loading:
        def __init__(self, root, main_frame, width, height):
            self.root = root
            self.main_frame = main_frame
            self.loading_frame = Frame(self.root,
                                       width=width, height=height)
            self.text = Label(self.loading_frame, text='Идёт загрузка...', font=8)
            self.text.pack(padx=width // 2 - 100)
            self.progress_bar = ttk.Progressbar(self.loading_frame, orient="horizontal",
                                                length=200, mode="determinate")
            self.progress_bar.pack(padx=width // 2 - 100)
            self.progress_bar['value'] = 0
            self.progress_bar['maximum'] = 100
            self.showed = False

        def show_loading(self, percent):
            if not self.showed:
                self.main_frame.grid_remove()
                self.loading_frame.grid()
                self.showed = True
            self.progress_bar['value'] = percent

        def loading_failed(self):
            self.text.destroy()
            self.text = Label(self.loading_frame, text='Файл загрузки повреждён!', font=8)
            self.text.pack()
            self.progress_bar.destroy()

        def close_loading(self):
            self.showed = False
            try:
                self.loading_frame.destroy()
            except TclError:
                pass
            self.main_frame.grid()
Beispiel #9
0
class ChoosingAIPanel:
    def __init__(self, root, func):
        self.choosing_frame = Frame \
            (root, height=60, width=100, bg='lightblue')
        self.var = IntVar()
        rbutton1 = Radiobutton(self.choosing_frame,
                               text='Easy',
                               variable=self.var,
                               value=1,
                               bg='lightblue')
        rbutton2 = Radiobutton(self.choosing_frame,
                               text='Hard',
                               variable=self.var,
                               value=2,
                               bg='lightblue')
        rbutton3 = Radiobutton(self.choosing_frame,
                               text='Random',
                               variable=self.var,
                               value=3,
                               bg='lightblue')
        button1 = Button(self.choosing_frame, text='Ok', bg='lightblue')
        rbutton1.select()
        rbutton1.pack(side='left')
        rbutton2.pack(side='left')
        rbutton3.pack(side='left')
        button1.pack(side='left')

        button1.bind('<1>', lambda e: func())

    def show(self):
        self.choosing_frame.grid()

    def destroy(self):
        self.choosing_frame.destroy()
Beispiel #10
0
class Block:
    def __init__(self, val: Optional[int], index: int, parent: Frame, parent_stack):
        # значение ячейки. чем оно меньше, тем больше его объем
        self.value: Optional[int] = val
        # выбираем рандомный цвет
        self.color = choice(['red', 'yellow', 'green', 'blue'])
        # задаём фиксированную высоту
        self.height=0.05
        # номер ячейки для отслеживания позиции в стеке и задания высоты
        self.index = index
        # слой, в котором размещается ячейка
        self.parent = parent
        # ссылка на стек, которому принадлежит блок
        self.parent_stack: Hanoi = parent_stack
        # сам фрейм
        self.frame = Frame(master=self.parent, bg=self.color,  highlightthickness=1, highlightbackground="black")

        self.block_status = 0

    # автоматически вычисляется ширина
    @property
    def width(self) -> float:
        return 0.5 - 0.08 * (self.value - 1)

    # автоматически вычисляется смешение блока к центру
    @property
    def width_offset(self) -> float:
        return 0.25 + 0.04 * (self.value - 1)

    # нахождение блока по высоте
    @property
    def y_offset(self):
        return 1 - (self.index + 1) * 0.05

    # отображение блока
    def visual_block(self):
        self.frame.place(relwidth=self.width, relheight=self.height, relx=self.width_offset, rely=self.y_offset)

    # удаление блока
    def destroy(self):
        self.frame.destroy()

    # сравнение блоков
    def __lt__(self, other) -> bool:
        return self.value < other.value

    def __gt__(self, other) -> bool:
        return self.value > other.value

    def __le__(self, other) -> bool:
        return self.value <= other.value

    def __ge__(self, other) -> bool:
        return self.value >= other.value

    def __str__(self) -> str:
        return str(self.value)
Beispiel #11
0
 def destroy(self):
     """
     Permet de détruire le dialogue entièrement,
     il n'est plus réactivable par la suite.
     """
     self.deactivate()
     self.__destroyed = True
     Frame.destroy(self)
     self.dialog.destroy()
Beispiel #12
0
class LoginPage(object):
    def __init__(self, master=None):
        self.root = master  # 定义内部变量root
        self.root.geometry(
            '%dx%d' %
            (constants.PARAMS_WIDTH, constants.PARAMS_HEIGHT))  # 设置窗口大小
        self.p1 = StringVar(value=constants.PARAMS_1)
        self.p2 = StringVar(value=constants.PARAMS_2)
        self.p3 = StringVar(value=constants.PARAMS_3)
        self.p4 = StringVar(value=constants.PARAMS_4)
        self.create_page()

    def create_page(self):
        self.page = Frame(self.root)  # 创建Frame
        self.page.pack()
        Label(self.page).grid(row=0, stick=W)

        Label(self.page, text='参数一: ').grid(row=1, stick=W, pady=10)
        Entry(self.page, textvariable=self.p1).grid(row=1, column=1, stick=E)

        Label(self.page, text='参数二: ').grid(row=2, stick=W, pady=10)
        Entry(self.page, textvariable=self.p2).grid(row=2, column=1, stick=E)

        Label(self.page, text='参数三: ').grid(row=3, stick=W, pady=10)
        Entry(self.page, textvariable=self.p3).grid(row=3, column=1, stick=E)

        Label(self.page, text='参数四: ').grid(row=4, stick=W, pady=10)
        Entry(self.page, textvariable=self.p4).grid(row=4, column=1, stick=E)

        Button(self.page, text='确认', command=self.login_check).grid(row=5,
                                                                    stick=W,
                                                                    pady=10)
        Button(self.page, text='退出', command=self.page.quit).grid(row=5,
                                                                  column=1,
                                                                  stick=E)

    def login_check(self):
        p1 = self.p1.get()
        p2 = self.p2.get()
        p3 = self.p3.get()
        p4 = self.p4.get()

        if not all((p1, p2, p3, p4)):
            # 弹出错误信息
            showerror(title='错误', message='必填参数')
        else:
            # 跳转下一个页面
            self.page.destroy()
            kwargs = {
                "p1": p1,
                "p2": p2,
                "p3": p3,
                "p4": p4,
            }
            MainPage(self.root, **kwargs)
Beispiel #13
0
class Start:
    def __init__(self, parent):

        # GUI to get user to start game
        self.start_frame = Frame(padx=10, pady=10)
        self.start_frame.grid()

        self.push_me_button = Button(text="Push Me", command=self.to_game)
        self.push_me_button.grid(row=0, pady=10)

        # hide start up window
        self.start_frame.destroy()
class ShowCard:
    def __init__(self, root, gamestate, handle_show_answerinput_view,
                 handle_show_frontpage_view):
        self.root = root
        self.gamestate = gamestate
        self.current_card = 0
        self.handle_show_answerinput_view = handle_show_answerinput_view
        self.handle_show_frontpage_view = handle_show_frontpage_view

        self.initialize()

    def initialize(self):
        self.frame = Frame(master=self.root)
        img = create_card_image(self.frame,
                                self.gamestate.deck[self.current_card])
        img.grid(row=0, column=0)
        deck_size = self.gamestate.get_deck_size()
        card_count = Label(master=self.frame,
                           text="Kortti: " + str(self.current_card + 1) + "/" +
                           str(deck_size))
        card_count.config(font=("Courier", 10))
        card_count.grid(row=1, column=0)
        next_button = Button(master=self.frame,
                             text="Seuraava",
                             command=self.nextcard_button_pressed)
        next_button.grid(padx=5, pady=5, sticky=constants.EW)
        warning_text = Label(
            master=self.frame,
            text="Mikäli haluat luovuttaa pelin paina alla olevaa nappia:")
        warning_text.config(font=("Courier", 10))
        warning_text.grid(row=3, column=0)
        give_up_button = Button(master=self.frame,
                                text="Lopeta peli",
                                command=self.handle_show_frontpage_view)
        give_up_button.grid(padx=5, pady=5, sticky=constants.EW)

    def nextcard_button_pressed(self):
        if self.current_card < len(self.gamestate.deck) - 1:
            self.current_card += 1
            self.destroy()
            self.initialize()
            self.pack()
        else:
            self.destroy()
            self.handle_show_answerinput_view(self.gamestate)

    def pack(self):
        self.frame.pack(fill=constants.X)

    def destroy(self):
        self.frame.destroy()
Beispiel #15
0
class RunView(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)

        self.is_running = True

        self.title = Label(self, text='RUN')
        self.middle_frame = Frame(self)
        self.run_button = Button(self, text='Launch', command=self.launch)
        self.stop_button = Button(self, text='Stop', command=self.stop)

        self.title.pack()
        self.middle_frame.pack()
        self.run_button.pack()
        self.stop_button.pack()
        self.stop_button.pack_forget()

    def launch(self):
        self.service = MainService()
        self.service.run()
        self.is_running = True
        t = Thread(target=self.poll)
        t.setDaemon(True)
        t.start()
        self.run_button.pack_forget()
        self.stop_button.pack()

    def poll(self):
        StatusBar().set_label('Polling has begun')
        self.temp_frame = Frame(self.middle_frame)
        self.temp_frame.pack()
        while True:
            lst = self.service.get_action_from_queue()
            for action in lst:
                StatusBar().set_label(f'Add {action} to queue')
                view = ActionView(self.temp_frame, action)
                view.forget_delete_button()
                view.pack()
                Speaker().add_to_queue(action.name)
            Speaker().run_and_wait()
            time.sleep(1)
            if not self.is_running:
                break

    def stop(self):
        StatusBar().set_label('Stop')
        self.is_running = False
        self.run_button.pack()
        self.stop_button.pack_forget()
        self.temp_frame.destroy()
Beispiel #16
0
class GuiController:
    window = None
    frame_tablero = None

    def __init__(self):
        self.window = Tk()
        self.window.title("Buscaminas")
        self.frame_tablero = Frame(self.window)
        self.frame_tablero.grid()

    def launch(self):
        self.window.mainloop()

    def add_celda_tablero(self, celda, left_click_action, right_click_action):
        button = Button(self.frame_tablero, bg=Color.CELDA_DEFAULT, activebackground=Color.CELDA_DEFAULT_OVER)
        button.bind("<Button-1>", left_click_action)
        button.bind("<Button-3>", right_click_action)
        button.config(height=1, width=1)
        button.grid(row=celda.posicion_x, column=celda.posicion_y)
        return button

    def revela_celda_con_mina(self, celda):
        celda.gui.configure(bg=Color.CELDA_MINA, state="disabled", text="X")

    def revela_celda_sin_mina(self, celda):
        celda.gui.configure(bg=Color.CELDA_LIBRE, state="disabled", text=str(celda.minas_cercanas))

    def bloquear_celda(self, celda):
        celda.gui.configure(bg=Color.CELDA_DEFAULT, activebackground=Color.CELDA_DEFAULT_OVER)

    def desbloquear_celda(self, celda):
        celda.gui.configure(bg=Color.CELDA_SEGURA, activebackground=Color.CELDA_SEGURA_OVER)

    def reset_tablero(self):
        self.frame_tablero.grid_forget()
        self.frame_tablero.destroy()
        self.frame_tablero = Frame(self.window)
        self.frame_tablero.grid()

    def game_over(self, game_controller):
        if messagebox.askretrycancel("Game over", "BOOM!"):
            game_controller.set_new_game()
        else:
            quit()

    def winner(self, game_controller):
        if messagebox.askquestion("You win", "¿Jugar de nuevo?"):
            game_controller.set_new_game()
        else:
            quit()
Beispiel #17
0
class LoginScreen(Window):
    def __init__(self, program):
        super().__init__(program)
        self.levels = None
        self.settings = program.settings
        self.level_handler = LevelHandler(program.settings)
        self.frame = Frame(program.master, width=800, height=800)
        self.frame.pack(side='top', fill='both', expand=1)
        self.show()

    def add_button(self, text, command):
        button = Button(self.frame,
                        text=text,
                        width=100,
                        height=20,
                        command=command)
        button.pack()

    def dispose(self):
        self.frame.pack_forget()
        self.frame.destroy()
        self.frame = None

    def show(self):
        self.add_button('New Game', self.new_game)
        self.add_button('Load Game', self.load_game)
        self.add_button('Exit', self.exit)
        self.frame.tkraise()

    def new_game(self):
        self.dispose()
        g = Game(self.program)
        g.new()
        self.change(Game(self.program))

    def exit(self):
        self.program.exit()

    def load_game(self):
        self.dispose()
        lg = LoadGame(self.program)
        lg.show()
        self.change(lg)

    def clear(self):
        self.frame.pack_forget()
        self.level_handler = None
        self.frame.destroy()
Beispiel #18
0
class GRow():
    def __init__(self, theme, root, data, size):
        self.data = data
        self.graphics = []
        self.view = Frame(root, borderwidth=1)
        for item in data:
            self.graphics.append(GButton(theme, self.view, item, size))
            self.graphics[-1].view.pack(side=LEFT)

    def __hash__(self):
        return hash(tuple(self.graphics))

    def destroy(self):
        self.view.destroy()
        for graphic in self.graphics:
            graphic.destroy
def frame_initiative(x):
    '''===================================================================================
        The frame for the initiative options is contained here. 
        need to add a section that automates the turn progression and gives stat readouts. 
        That might need to be in a seperate frame off to the right though.
        Adding it here might make this definition too big.
        =================================================================================='''
    global frame_initiative_open
    if frame_initiative_open == False:
        print(
            'DEBUG: frame initiative displayed'
        )  #Debug, delete this at some point.==================================
        frame_initiative = Frame(window_main)
        frame_initiative.pack(side=LEFT)
        button_add_npc = Button(frame_initiative,
                                activebackground='#909090',
                                text="Add NPC",
                                activeforeground='#990099',
                                bd=10,
                                width=25,
                                command=add_npc)
        button_close = Button(frame_initiative,
                              activebackground='#909090',
                              text="close",
                              activeforeground='#990099',
                              bd=10,
                              width=25,
                              command=frame_initiative.destroy())
        button_add_npc.pack()
        button_close.pack()
        frame_initiative_open = True
Beispiel #20
0
class SpaceView(Frame):

    VIEW_SIZE = 10

    instance = None

    def __init__(self, root):

        SpaceView.instance = self

        Frame.__init__(self, root)

        self.cam = [0, 0]

        self.content = Frame(self)
        self.content.grid()

        self.refresh_view()

    def refresh_view(self):

        if ToolBox.instance: ToolBox.instance.refresh_buttons_infos()

        self.content.destroy()
        self.content = Frame(self)
        self.content.grid()

        for x in range(self.VIEW_SIZE):
            for y in range(self.VIEW_SIZE):

                xw = x + self.cam[0]
                yw = y + self.cam[1]

                try:
                    txt = (Space.instance.data[xw, yw][GAME_OBJ] if Space.instance.data[xw, yw][GAME_OBJ] is not None else "   ")\
                    +(("," + Space.instance.data[xw, yw][INDEX]) if Space.instance.data[xw, yw][INDEX] is not None else "")\
                    +(("," + Space.instance.data[xw, yw][AREA]) if Space.instance.data[xw, yw][AREA] is not None else "")

                except KeyError:
                    txt = " "

                Button(self.content,
                       text=txt,
                       command=lambda xw=xw, yw=yw: ToolBox.instance.
                       tile_selected(xw, yw)).grid(row=y, column=x)
Beispiel #21
0
def addObject(objectFrame, row, minorPLanet):
    frame = Frame(objectFrame)

    #name, score, ra...
    name = Label(frame, text=minorPLanet.name)
    remove = Button(frame, text="Remove", command=lambda: frame.destroy())

    remove.grid(row=0, column=0)
    name.grid(row=0, column=1)
    frame.grid(row=row)
Beispiel #22
0
class ControlPanel:
    def __init__(self, root, load, exit):
        self.panel_frame = Frame(root, height=60, width=100)

    def create_exit_btn(self, exit):
        self.exit_btn = Button \
            (self.panel_frame, text='Exit', bg='lightblue')
        self.exit_btn.pack(side='right')
        self.exit_btn.bind("<1>", exit)

    def create_restart_btn(self, start):
        # start('start')
        self.restart_btn = Button \
            (self.panel_frame, text='Restart', bg='lightblue')
        self.restart_btn.pack(side='right')
        self.restart_btn.bind("<1>", start)

    def create_load_btn(self, load):
        self.load_btn = Button \
            (self.panel_frame, text='Load', bg='lightblue')
        self.load_btn.pack(side='right')
        self.load_btn.bind("<1>", load)

    def create_save_btn(self, save):
        self.save_btn = Button \
            (self.panel_frame, text='Save', bg='lightblue')
        self.save_btn.pack(side='left')
        self.save_btn.bind("<1>", save)

    def create_unturn_btn(self, unturn):
        self.unturn_btn = Button \
            (self.panel_frame, text='Turn somewhere else', bg='lightblue')
        self.unturn_btn.pack(side='right')
        self.unturn_btn.bind("<1>", unturn)

    def show(self):
        try:
            self.panel_frame.grid()
        except TclError:
            return

    def destroy(self):
        self.panel_frame.destroy()
Beispiel #23
0
class TripleFrame:
    '''
  A frame renders a triple (or pair) of widget

  pair = TripleFrame(root, Label, lambda pf: Button(pf, text = "Hello"))
  '''
    def __init__(self, parent, a, b, c=None, pad=20):
        self.parent = parent
        self.frame = Frame()
        self.wa = a(self.frame)
        self.wb = b(self.frame)
        if c is not None: self.wc = c(self.frame)
        self.pad = pad

    def pack(self):
        ''' register to parent container '''
        self.frame.pack()
        self.wa.pack(side=LEFT, padx=self.pad)
        if self.wc is not None: self.wc.pack(side=RIGHT)
        self.wb.pack(side=RIGHT, padx=self.pad)

    def destroy(self):
        self.wa.forget()
        self.wa.destroy()
        self.wb.forget()
        self.wb.destroy()
        if self.wc is not None:
            self.wc.forget()
            self.wc.destroy()
        self.frame.destroy()

    def get_a(self):
        return self.wa

    def get_b(self):
        return self.wb

    def get_c(self):
        return self.wc

    a = property(get_a)
    b = property(get_b)
    c = property(get_c)
Beispiel #24
0
class LoadGame(Window):
    def __init__(self, program):
        super().__init__(program)
        self.frame = Frame(program.master, width=800, height=800)
        self.frame.pack(side='top', fill='both', expand=1)
        self.listbox = Listbox()
        self.save_names = []

    def dispose(self):
        self.listbox.pack_forget()
        self.frame.pack_forget()
        self.listbox.destroy()
        self.frame.destroy()
        self.listbox = None
        self.frame = None

    def show(self):
        for file_name, file_path in self.program.settings.list_saves():
            self.listbox.insert(END, file_name)
            self.save_names.append(file_name)
        self.listbox.pack()
        self.add_button('Back', self.back)
        self.add_button('Load', self.load)

    def load(self):
        selection = next(iter(map(int, self.listbox.curselection())))
        self.dispose()
        g = Game(self.program)
        g.load(self.save_names[selection])
        self.change(g)

    def back(self):
        self.dispose()
        self.change(LoginScreen(self.program))

    def add_button(self, text, command):
        button = Button(self.frame,
                        text=text,
                        width=100,
                        height=20,
                        command=command)
        button.pack()
class BaseWindow:
    def __init__(self, root):
        self.root = root
        self.frame = Frame(root)

    def move_to_window(self, window):
        self.frame.destroy()
        window.create_content()

    def set_text(self, entry, text):
        entry.delete(0, END)
        entry.insert(0, text)

    def check_fill_entry(self, button, entry_list):
        for entry in entry_list:
            if not entry.get():
                button.config(state=DISABLED)
                break
            else:
                button.config(state=NORMAL)
Beispiel #26
0
class InputBox:
    def __init__(self, default_data=''):
        self.default_data = default_data

        self.area = root.focus_get()
        self.frame = Frame(root, border=1, padx=3, pady=3)
        self.entry = Entry(self.frame)
        self.entry.config(background='grey')
        self.entry.focus_set()

        # Maybe there is a more elegant way.
        self.entry.bind('<FocusOut>', lambda event: self.entry.focus_set())
        self.entry.insert('end', default_data)
        self.entry.pack(side='left', expand=True, fill=BOTH)
        self.frame.grid(row=1, sticky='we')

    def done(self):
        self.entry.destroy()
        self.frame.destroy()
        self.area.focus_set()
Beispiel #27
0
    def go_action(self, actions):
        """
        execute the action script
        :param actions:
        :return:
        """
        # hide the menu and show a delay screen
        self.hide_top()
        delay = Frame(self, bg="#2d89ef")
        delay.pack(fill=TkC.BOTH, expand=1)
        label = Label(delay, text="Executing...", fg="white", bg="#2d89ef", font="Sans 30")
        label.pack(fill=TkC.BOTH, expand=1)
        self.parent.update()

        # excute shell script
        subprocess.call([self.path + '/pimenu.sh'] + actions)

        # remove delay screen and show menu again
        delay.destroy()
        self.destroy_all()
        self.show_top()
Beispiel #28
0
class Canvas_widjet:


    def __init__(self, some_quantity_of_column_row, some_size_column_row,
                 some_canvas, some_window, some_name):
        self.root_window = some_window
        self.canvas = some_canvas
        self.canvas_centr_xy = int(some_quantity_of_column_row
                                  * some_size_column_row/2)

    def draw(self, some_record, some_name):
        self.record = some_record
        self.entry_string = some_name
        self.frame = Frame(self.canvas)
        self.window_on_canvas = self.canvas.create_window(self.canvas_centr_xy,
                                                          self.canvas_centr_xy,
                                                          height = 220,
                                                          width = 220,
                                                          window = self.frame)
        self.label1 = Label(self.frame, text = "Congratulations !!", font = "arial 20")
        self.entry = Entry(self.frame, width = 10, font = "arial 20")
        self.entry.insert(0, self.entry_string)
        self.label2 = Label(self.frame, text = "Your record: " + str(some_record),
                            font = "arial 20")
        self.label1.grid(column = 0, row = 0)
        self.entry.grid(column = 0, row = 1)
        self.label2.grid(column = 0, row = 2)

    def erase(self):
        self.label1.destroy()
        self.label2.destroy()
        self.entry.destroy()
        self.frame.destroy()
        self.canvas.delete(self.window_on_canvas)

    def hide(self):
        self.canvas.itemconfig(self.window_on_canvas, state = HIDDEN)

    def show(self):
        self.canvas.itemconfig(self.window_on_canvas, state = NORMAL)
Beispiel #29
0
class SaveGui:

    __name = None

    def __init__(self, main_controller, window):
        self.__main_controller = main_controller
        self.__window = window
        self.__menu = None

    def show(self):
        self.__menu = Frame(self.__window)
        self.__menu.configure(padx=10, pady=20)
        self.__menu.pack(fill=BOTH, expand=True)
        line1 = Frame(self.__menu)
        line1.pack(fill=X)
        self.__name = StringVar()
        self.__name.set("my_game_at_"+strftime("%H:%M")+"-"+strftime("%d.%m.%Y"))
        name_input = Entry(line1)
        name_input.configure(textvariable=self.__name)
        name_input.pack(fill=X)
        line2 = Frame(self.__menu)
        line2.pack(fill=X, pady=20)
        save_btn = Button(line2)
        save_btn.configure(text="Save Game", command=self.save)
        save_btn.pack(fill=X)

    def remove(self):
        if self.__menu is not None:
            self.__menu.destroy()
            self.__memu = None

    def save(self):
        if self.__name is not None:
            self.__main_controller.save_game(self.__name.get())
        self.remove()
        self.__main_controller.show_game()
        self.__main_controller.toggle_game()
        self.__main_controller.toggle_game()
Beispiel #30
0
class GameSettings:
    def __init__(self, root, handle_show_game_first_view):
        self.root = root
        self.card_number_entry = None
        self.handle_show_game_first_view = handle_show_game_first_view

        self.initialize()

    def amount_handler(self):
        """checking that the input is int if not errormessage shown"""
        amount = self.card_number_entry.get()
        try:
            val = int(amount)
            gamestate = GameState(val)
            self.handle_show_game_first_view(gamestate)
            gamestate.print_status()
        except ValueError:
            messagebox.showinfo(
                "VIRHE", "Ole ystävällinen ja syötä kokonaisluku. Kiitos!")

    def initialize(self):
        """asking for amount of cards to be shown and giving the
        input to amount_handler"""
        self.frame = Frame(master=self.root)
        card_amunt_label = Label(master=self.frame, text="Korttien määrä: ")
        card_amunt_label.grid(row=0, column=0)
        self.card_number_entry = Entry(master=self.frame)
        self.card_number_entry.grid(row=0, column=1)
        start_button = Button(master=self.frame,
                              text="Aloita peli",
                              command=self.amount_handler)
        start_button.grid(padx=5, pady=5, sticky=constants.EW)

    def pack(self):
        self.frame.pack(fill=constants.X)

    def destroy(self):
        self.frame.destroy()
Beispiel #31
0
def populate(specs):
    global objectframe
    global row
    #global selection
    fr = Frame(objectframe)
    fr.grid(row=row)

    lb = Label(fr, text=specs.get("name").get())

    #row doesn't have to be decreased because it doesn't leave blanks
    qt = Button(fr, text="Remove", command=lambda: fr.destroy())
    qt.pack(side=LEFT)
    lb.pack(side=RIGHT)
    row += 1
Beispiel #32
0
class Frontpage:
    def __init__(self, root, handle_show_game_settings):
        self.root = root
        self.frame = None
        self.handle_show_game_settings = handle_show_game_settings

        self.initialize()

    def initialize(self):
        self.frame = Frame(master=self.root)
        info_button = Button(master=self.frame,
                             text="Tietoja",
                             command=self.info_view)
        start_button = Button(master=self.frame,
                              text="Aloita",
                              command=self.handle_show_game_settings)
        score_button = Button(master=self.frame,
                              text="Huipputulokset",
                              command=print("tulossa"))

        start_button.grid(padx=5, pady=5, sticky=constants.EW)
        score_button.grid(padx=5, pady=5, sticky=constants.EW)
        info_button.grid(padx=5, pady=5, sticky=constants.EW)

    def info_view(self):
        lines = [
            "Tämä on muistipeli sovellus.",
            "Pelin tavoite on muistaa korttipakan kortit järjestyksessä.",
            "Paina aloita ja valitse korttien määrä aloittaaksesi."
        ]
        messagebox.showinfo("Tietoja", "\n".join(lines))

    def pack(self):
        self.frame.pack(fill=constants.X)

    def destroy(self):
        self.frame.destroy()
Beispiel #33
0
class EndScreen(Screen):
    ROUTENAME = "/end"

    def clickButton(self):
        self._screenManager.navigate("/")

    def initBuild(self, txt):

        self.frame = Frame(width=1000, height=800)
        self.frame.place(x=0, y=0)

        self.LabelEnd = Label(master=self.frame, text=txt, fg="#417D9E")
        self.LabelEnd["font"] = font.Font(family='Arial',
                                          size=50,
                                          weight='bold')
        self.LabelEnd.place(anchor="center", relx=0.5, rely=0.1)

        self.ButtonPlay = Button(master=self.frame,
                                 text="Zum Menü",
                                 command=self.clickButton,
                                 bg="#265B78",
                                 activebackground="#265B78",
                                 fg="#ffffff",
                                 activeforeground="#ffffff",
                                 borderwidth=0)
        self.ButtonPlay["font"] = font.Font(family='Arial',
                                            size=20,
                                            weight='bold')
        self.ButtonPlay.place(anchor="center",
                              relx=0.5,
                              rely=0.5,
                              width=210,
                              height=80)

    def clear(self):
        self.frame.destroy()
Beispiel #34
0
class Widget_:

	def __init__(self, parent_frame, x, y, width=50, height=50):
		self.widget_frame = Frame(parent_frame, width=width, height=height)
		self.widget_frame.place(x=x, y=y)
		self.x, self.y, self.width, self.height = x, y, width, height
		self.tags = []
		return

	def add_tag(self, string):
		self.tag.append(string)
		return

	def resize(self, new_width, new_height):
		self.widget_frame.config(width=new_width, height=new_height)
		return

	def delete_widget(self):
		self.widget_frame.destroy()
		return

	def hide_widget(self):
		self.widget_frame.place_forget()
		return

	def show_widget(self, new_x, new_y):
		self.widget_frame.place(x=new_x, y=new_y)
		return

	def get_info(self):
		return

	def set_field(self):
		return

	pass
Beispiel #35
0
class TrendProg(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent, background='white')
        # saved reference to parent widget. "Tk root window"
        self.parent = parent
        self._workbook = None
        self._file_path = None
        self._folder_path = None

        # set properties of buttons
        self.frame_1 = Frame(self, relief=RAISED)
        self.run_button = Button(self, text='Run', width=10,
                                 command=self.run_program)
        self.file_button = Button(self.frame_1, text='Select File',
                                  width=15, command=self.get_file)
        self.folder_button = Button(self.frame_1, text='Select Folder',
                                    width=15, command=self.get_folder)
        self.close_button = Button(self, text='Close', width=10,
                                   command=self.quit)
        self.init_gui()

    def init_gui(self):
        self.parent.title('Trending Analysis')
        # fill frame to take up whole of root window
        self.pack(fill=BOTH, expand=True)
        self.frame_1.pack(fill=BOTH, expand=True)

        # put buttons on GUI
        self.folder_button.pack(side=RIGHT, padx=5)
        self.file_button.pack(side=LEFT, padx=5, pady=5)
        self.close_button.pack(side=RIGHT, padx=5, pady=5)
        self.run_button.pack(side=RIGHT, pady=5)

    def get_file(self):
        self._file_path = filedialog.askopenfilename()
        if self._file_path != '':
            self.file_button.config(text='File Selected!')
            self.file_button.pack(fill=BOTH, expand=True, padx=5, pady=5)
            self.folder_button.destroy()

    def get_folder(self):
        self._folder_path = filedialog.askdirectory()
        if self._folder_path != '':
            self.folder_button.config(text='Folder Selected!')
            self.folder_button.pack(fill=BOTH, expand=True, padx=5, pady=5)
            self.file_button.destroy()

    def run_program(self):
        workbook = 'Draft_Detail_Findings.xlsx'
        worksheet = 'Template'
        # user selected one CAPA
        print('=' * 75)
        if self._folder_path == '' or self._folder_path is None:
            self._file_path = self.convert_to_docx(self._file_path)
            docx_to_xlsx.main(self._file_path, workbook, worksheet)
            print('=' * 75)
        # user selected a folder of CAPA's
        elif self._file_path == '' or self._file_path is None:
            for f in os.listdir(self._folder_path):
                # get full path name
                file_name = str(self._folder_path + '/' + f)
                file_name = self.convert_to_docx(file_name)
                docx_to_xlsx.main(file_name, workbook, worksheet)
                print('=' * 75)

        # get ready to end the program
        # pd = project_data.TrendData(workbook, worksheet)
        print('Done.')
        self.frame_1.destroy()
        self.run_button.destroy()
        self.close_button.config(text='Done.')
        self.close_button.pack(fill=BOTH, expand=True, padx=10, pady=10)

    @classmethod
    def convert_to_docx(cls, file_selected):
        """ Check that file(s) selected is .docx NOT .doc and convert if needed. """
        if str(file_selected).endswith('.docx'):
            return file_selected
        else:
            new_file_name = re.sub('.doc', '.docx', file_selected)
            # full path to wordconv.exe
            word_conv = r'C:\Program Files (x86)\Microsoft Office\Office12\wordconv.exe'
            commands = ['wordconv.exe', '-oice', '-nme', file_selected, new_file_name]
            try:
                print('CONVERTING {}'.format(file_selected))
                subprocess.Popen(commands, executable=word_conv)
                # wait for converted file to be created
                while not os.path.exists(new_file_name):
                    time.sleep(1.5)
                print('REMOVING old .doc file ...')
                os.remove(file_selected)
                return new_file_name
            except OSError:
                print('FAILED to convert file. Check to see if it exists.')
Beispiel #36
0
class QueryBrowserUI(Tk):
    appName = "PySQLiTk3 - query browser"
    initSize = "900x600"
    configFile = 'conf.ini'
    sqlSqliteUrl = "http://www.sqlite.org/lang.html"
    tablesAtLeft = True
    selectedTable = ''
        
    def __init__(self, app):
        self.app = app
        super().__init__()
        self.configureLocale()
        self.title(self.appName)
        self.geometry(self.initSize)
        self.createMenu()
        self.createContent()
        self.loadLastDataBaseFile()
        
    def configureLocale(self):
        if sys.platform.startswith('win'):
            import locale
            if os.getenv('LANG') is None:
                lang, enc = locale.getdefaultlocale()
                os.environ['LANG'] = lang
        textdomain("app")
        bindtextdomain("app","./locale")

    def start(self):
        self.mainloop()
        
    def createMenu(self):
        menu = Menu(self)
        self.config(menu=menu)
        #File
        mnFile = Menu(menu, tearoff=0)
        menu.add_cascade(label=_("File"), underline=0, menu=mnFile)
        mnFile.add_command(label=_("New..."), underline=0, command=lambda cmd='NEW':  self.onCommand(cmd))
        mnFile.add_command(label=_("Open..."), underline=0, command=lambda cmd='OPEN': self.onCommand(cmd))
        mnFile.add_separator()
        mnFile.add_command(label=_("Quit"), underline=0, command=lambda cmd='EXIT': self.onCommand(cmd))
        #View
        self.mnView = Menu(menu, tearoff=0)
        menu.add_cascade(label=_("View"), underline=0, menu=self.mnView)
        self.mnView.add_command(label=_("Tables at %s") % _('right'), underline=0, command=lambda cmd='TABLES_RL': self.onCommand(cmd))
        #Help
        mnHelp = Menu(menu, tearoff=0)
        menu.add_cascade(label=_("Help"), underline=0, menu=mnHelp)
        mnHelp.add_command(label=_("SQL by SQLite..."), underline=0, command=lambda: webbrowser.open(self.sqlSqliteUrl))
        mnHelp.add_command(label=_("About..."), underline=0, command=lambda cmd='ABOUT': self.onCommand(cmd))
        
    def createContent(self):
    # Top Panel: ---------------------------------
        pnlTop = Frame(self)
        pnlTop.pack(side="top", fill="both", pady=10, padx=10)
        self.btnDB = Button(pnlTop, text=_("Open Data Base..."), command=lambda cmd='OPEN': self.onCommand(cmd))
        self.btnDB.grid(row=1, column=2, padx=5)

    # Query Panel: -----------------------------------
        self.pnlQuery = Frame(self)
        self.pnlQuery.pack(side="right", fill="both", expand=True, padx=10)
        #-- SQL Panel: 
        pnlSQL = Frame(self.pnlQuery)
        pnlSQL.pack(side="top", fill="both")
        Label(pnlSQL, text = "SQL:").grid(row=1, column=1, padx=5)
        self.txtSQL = TextSQL(pnlSQL, height=10, width = 60)
        self.txtSQL.grid(row=1, column=2, padx=5, pady=10)
        Button(pnlSQL, text = _("Run"), command=lambda cmd='RUN': self.onCommand(cmd)).grid(row=1, column=3, padx=5)
        #-- Buttons Panel
        pnlBtns = Frame(pnlSQL)
        pnlBtns.grid(row=2, column=2)
        Button(pnlBtns, text='INSERT', width = 12, command=lambda cmd='QUERY',query='INSERT': self.onCommand(cmd,query=query)).grid(row=1, column=1)
        Button(pnlBtns, text='SELECT', width = 12, command=lambda cmd='QUERY',query='SELECT': self.onCommand(cmd,query=query)).grid(row=1, column=2)
        Button(pnlBtns, text='UPDATE', width = 12, command=lambda cmd='QUERY',query='UPDATE': self.onCommand(cmd,query=query)).grid(row=1, column=3)
        Button(pnlBtns, text='DELETE', width = 12, command=lambda cmd='QUERY',query='DELETE': self.onCommand(cmd,query=query)).grid(row=1, column=4)        
        #-- Result Panel:
        self.pnlResult = Frame(self.pnlQuery)
        self.pnlResult.pack(side="top", fill="both", expand=True, pady=10, padx=10)
        self.resultGrid = TextResult(self.pnlResult)
        self.resultGrid.pack(side="top", fill="both", expand=True)
                
    #Table List Panel: ---------------------------------------
        self.pnlTables = Frame(self)
        self.pnlTables.pack(side="left", fill="both", pady=10, padx=10)
        #---Tables Buttons Panel: 
        self.pnlTableList = Frame(self.pnlTables)
        self.pnlTableList.pack(side="top", fill="both", pady=10)
        #---Panel Nueva: Button
        pnlNewTable = Frame(self.pnlTables)
        pnlNewTable.pack(side="bottom", pady=10, padx=10)
        Button(pnlNewTable, text=_("New Table"), command=lambda cmd='QUERY',query='CREATE': self.onCommand(cmd,query=query,table='<table>')).grid(row=1, column=2, padx=5)

    def tableContextMenu(self, event, table=''):
        popup = Menu(self, tearoff=0)
        popup.add_command(label=_("Add Column"), command=lambda cmd='QUERY',query='ADD', table=table: self.onCommand(cmd,query=query,table=table))
        popup.add_command(label=_("Rename Table"), command=lambda cmd='QUERY',query='RENAME', table=table: self.onCommand(cmd,query=query,table=table))
        popup.add_command(label=_("Drop Table"), command=lambda cmd='QUERY',query='DROP', table=table: self.onCommand(cmd,query=query,table=table))
        popup.post(event.x_root, event.y_root)

    def showTables(self):
        tables = self.app.getTables()
        self.pnlTableList.destroy()
        self.pnlTableList = Frame(self.pnlTables)
        self.pnlTableList.pack(side="top", fill="both", pady=10)
        self.btnTables = {}
        Label(self.pnlTableList, text=_('Tables')).grid(row=0, column=1)
        for n,table in enumerate(tables):
            self.btnTables[table] = Button(self.pnlTableList, text=table,width=20, command=lambda cmd='QUERY',query='SELECT',table=table: self.onCommand(cmd,query=query,table=table))
            self.btnTables[table].grid(row=n+1, column=1)
            self.btnTables[table].bind("<Button-3>", lambda event, table=table:self.tableContextMenu(event, table))
            if table == self.selectedTable:
                self.markTable(table)
        
    def onCommand(self, comando, **args):
        comandos = {
            'NEW':self.newDataBaseFile,
            'OPEN':self.openDataBaseFile,
            'EXIT':self.exitApp,
            'ABOUT':self.about,
            'QUERY':self.showQuery,
            'RUN':self.run,
            'TABLES_RL': self.showTablesAtRightOrLeft
        }
        try:
            comandos[comando](**args)
        except KeyError:
            showerror(_('Error'), _('Unknown command: ')+ comando)
            
    def exitApp(self):
        self.destroy()
        
    def about(self):
        showinfo(_('About...'), self.appName+'\n'+_('Desarrollado por:')+'\n'+_('Martín Nicolás Carbone')+'\n'+_('Agosto 2014'))

    def showTablesAtRightOrLeft(self):
        self.tablesAtLeft = not self.tablesAtLeft
        querySide, tablesSide = ("right", "left") if self.tablesAtLeft else ("left", "right")
        self.pnlTables.pack(side=tablesSide, fill="both", pady=10, padx=10)
        self.pnlQuery.pack(side=querySide, fill="both", expand=True, padx=10)
        self.mnView.entryconfigure(0, label=_("Tables at %s") % _(querySide))

    def selectTable(self, table):
        self.unMarkTable(self.selectedTable)
        self.selectedTable = table if table != '' else self.selectedTable
        self.markTable(self.selectedTable)
        return self.selectedTable

    def unMarkTable(self, table):
        try:
            self.btnTables[table].config(relief='raised')
        except KeyError:
            pass
    def markTable(self, table):
        try:
            self.btnTables[table].config(relief='sunken')
        except KeyError:
            pass
        
    def newDataBaseFile(self):
        path = asksaveasfilename(defaultextension=".db")
        if path != '':
            self.openDataBase(path)

    def openDataBaseFile(self):
        path = askopenfilename(filetypes=((_("Data base files"), "*.db;*.dat;*.sqlite;*.sqlite3;*.sql;"),(_("All files"), "*.*") ))
        if path != '':
            self.openDataBase(path)

    def loadLastDataBaseFile(self):
        path = self.readPath()
        if path != '':
            self.openDataBase(path) 
        
    def savePath(self, path):
        with open(self.configFile, 'w') as f:
            f.write(str(path))
        
    def readPath(self):
        try:
            with open(self.configFile, 'r') as f:
                return str(f.read())
        except IOError:
            return ''

    def openDataBase(self, path):
        self.basePath = path if path != '' else self.basePath
        try:
            self.app.openDataBase(self.basePath)
            self.savePath(self.basePath)
            self.btnDB.config(text=self.basePath)
            self.selectedTable = ''
            self.showTables()
        except IOError:
            showerror(_('Error'),_('Error')+' '+_("Open Data Base..."))

    def showQuery(self, query, table=''):
        table = self.selectTable(table)       
        sql=self.app.createQuery(query, table)
        self.txtSQL.setText(sql)

    def run(self):
        query = self.txtSQL.getText()
        result = self.app.runQuery(query)
        self.resultGrid.setText(result)
        if result == '':
            self.showTables()
Beispiel #37
0
class EguanaGUI(Frame):
  
    def __init__(self, parent):
        Frame.__init__(self, parent)   
         
        self.parent = parent
        self.initUI()

        # if not EguanaInit.eguana_root_dir_exists():
        #     EguanaInit.create_eguana_root_dir()
        
    def initUI(self):
      
        self.parent.title("EGUANA")
        self.style = ttk.Style()        
        self.style.theme_use("alt")        
        
        self.photoName = "eguana.gif"
        self.frame = Frame(self, relief=FLAT, borderwidth=10,bg='#FADC46')

        self.frame.pack(fill=BOTH, expand=True)        
        self.pack(fill=BOTH, expand=True)
        
        self.setupMenuBar()
        self.setupTopBar()  
        
    def setupMenuBar(self):
        
        self.menubar = EguanaMenu(self.parent,self)
        self.parent.config(menu=self.menubar)

    def setupTopBar(self):
        
        self.supportedDevices = []        
        
        for fileName in [name for name in os.listdir('./machineConfig') if os.path.isfile('./machineConfig/' + name) and not name == 'eguanaMachineConfig.py' and  name.endswith('.py')]:
        # try:{
            components = fileName.split('.')
            fileName = components[0]
            className = fileName[0].upper() + fileName[1:]
            try:
                module = __import__("machineConfig."+fileName,fromlist=["machineConfig."])                        
                classVar = getattr(module,className)
            except:
                continue
            self.supportedDevices.append(classVar())
            # except:
            #     pass

        self.selectMachineFrame = Frame(self.frame,relief=FLAT,bg='#FADC46')
        self.selectMachineFrame.pack(fill=BOTH,expand=True)
        self.setupSelectMachineButtons()
        
    def setupSelectMachineButtons(self):

        numDevices = len(self.supportedDevices)
        numColumns = 3
        numRows = math.ceil((numDevices+1)/3)
        
        self.photo = PhotoImage(file="eguana.gif")
        self.photo = self.photo.subsample(2);
        self.photo_label = Label(self.selectMachineFrame,image=self.photo,borderwidth=0,highlightthickness=0)
        self.photo_label.configure(bg='#FADC46')
        self.photo_label.grid(row=int(numRows/2),column=1, sticky=N+S+E+W,padx=2,pady =2)
        self.photo_label.image = self.photo        
        
        index = 0
        for i in range(numRows):
            for j in range(numColumns):
                
                if not(j == 1 and i == int(numRows/2)) and (index < numDevices):
                    device = self.supportedDevices[index]
                    b = Button(self.selectMachineFrame,text=device.name,relief=RAISED, command=lambda device=device :self.machineButtonPressed(device))
                    b.grid(row=i,column=j, sticky=N+S+E+W,padx=2,pady =2)
                    index += 1

            
        for i in range(numRows):
            self.selectMachineFrame.rowconfigure(i,weight=1)
         
        for i in range(numColumns):
            self.selectMachineFrame.columnconfigure(i,weight=1)
            

    def machineButtonPressed(self,inputDevice):

        dirStr = filedialog.askdirectory()
        
        if len(dirStr) and inputDevice.isDirectoryValid(dirStr):

            inputDevice.setDirPath(dirStr)
            EguanaModel().machine = inputDevice

            self.selectMachineFrame.destroy()

            self.menubar.inputSelected()

            self.photo_label.destroy()

            dirStr = 'Input Path : '+dirStr


            
            self.selectPlotFrame = Frame(self.frame, relief=FLAT,bg='#FADC46')
            self.selectPlotFrame.pack(fill=BOTH,expand=True)
            self.selectPlotFrame.rowconfigure(0,weight=1)
            self.selectPlotFrame.rowconfigure(1,weight=2)
            self.selectPlotFrame.columnconfigure(0,weight=1)

            self.infoFrame = Frame(self.selectPlotFrame, relief=FLAT, bg='#FADC46')
            self.infoFrame.grid(row=0,column=0, sticky=N+S+E+W,padx=2,pady =2)
               
            
            self.machineNameLabel = Label(self.infoFrame, text=inputDevice.name,relief=FLAT)
            self.machineNameLabel.grid(row=0,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2)

            self.directoryLabel = Label(self.infoFrame, text="No project currently selected",relief=FLAT)
            self.directoryLabel.grid(row=1,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2)
            self.directoryLabel.config(text=dirStr)
            
        
            self.outputDirButton = Button(self.infoFrame,text="No output directory selected. Click to select an output directory ",relief=RAISED,fg='red',command=self.askOutputDirectory)
            self.outputDirButton.grid(row=2,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2)
            
            
            self.filterButton = Button(self.infoFrame,text="No filter selected. Click to select a filter",relief=RAISED,fg='red',command=self.selectFilter)
            self.filterButton.grid(row=3,column=0,columnspan=2, sticky=N+S+E+W,padx=2,pady =2)
           
           
            self.trialLabel = Label(self.infoFrame,text="Trial Number",relief=FLAT,justify=RIGHT,anchor=E)
            self.trialLabel.grid(row=4,column=0, sticky=N+S+E+W,padx=2,pady =2)


            vcmd = (self.master.register(self.validate),'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
            self.trialEntry = Entry(self.infoFrame,validate = 'key', validatecommand = vcmd)
            self.trialEntry.grid(row=4,column=1, sticky=N+S+E+W,padx=2,pady =2)

            self.infoFrame.columnconfigure(0, weight=1)
            self.infoFrame.columnconfigure(1, weight=1)
            self.infoFrame.rowconfigure(0, weight=1)
            self.infoFrame.rowconfigure(1, weight=10)
            self.infoFrame.rowconfigure(2, weight=10)
            self.infoFrame.rowconfigure(3, weight=10)
            self.infoFrame.rowconfigure(4, weight=10)

            self.showPlotTools()

    def validate(self, action, index, value_if_allowed,
                       prior_value, text, validation_type, trigger_type, widget_name):
                           
        if len(value_if_allowed)==0 : 
            return True
        
        if text in '0123456789.-+ ':
            try:
                float(value_if_allowed)
                return True
            except ValueError:
                return False
        else:
            return False
            
    def askOutputDirectory(self):
        dirStr = filedialog.askdirectory()
        if len(dirStr):
            dirStr = 'Output Path : '+dirStr
            self.outputDirButton.config(text=dirStr)

            

    def showPlotTools(self):        
        
        
        f2= Frame(self.selectPlotFrame, relief=FLAT,bg='#FADC46')
        f2.grid(row=1,column=0,sticky=N+S+E+W,padx=10,pady =10)
        
        b1 = Button(f2,text='3D K',relief=RAISED,command= lambda:self.plotButtonPressed(1))
        b1.grid(row=0, column=0,sticky=N+S+E+W,padx=5,pady =5)

        b2 = Button(f2,text='3D Dist',relief=RAISED,command=lambda:self.plotButtonPressed(2))
        b2.grid(row=0, column=1,sticky=N+S+E+W,padx=5,pady =5)
        
        b3 = Button(f2,text='3D DP',relief=RAISED,command=lambda:self.plotButtonPressed(3))
        b3.grid(row=0, column=2,sticky=N+S+E+W,padx=5,pady =5)
        
        b4 = Button(f2,text='2D K',relief=RAISED,command=lambda:self.plotButtonPressed(4))
        b4.grid(row=1, column=0,sticky=N+S+E+W,padx=5,pady =5)

        b5 = Button(f2,text='2D Dist',relief=RAISED,command=lambda:self.plotButtonPressed(5))
        b5.grid(row=1, column=1,sticky=N+S+E+W,padx=5,pady =5)

        b6 = Button(f2,text='2D DP',relief=RAISED,command=lambda:self.plotButtonPressed(6))
        b6.grid(row=1, column=2,sticky=N+S+E+W,padx=5,pady =5)
        
        
    
        b1.config(state=EguanaModel().machine.plot3DKButtonState)
        b2.config(state=EguanaModel().machine.plot3DDstButtonState)
        b3.config(state=EguanaModel().machine.plot3DDpButtonState)
        b4.config(state=EguanaModel().machine.plot2DKButtonState)
        b5.config(state=EguanaModel().machine.plot2DDstButtonState)
        b6.config(state=EguanaModel().machine.plot2DDpButtonState)

        f2.columnconfigure(0, weight=1)
        f2.columnconfigure(1, weight=1)
        f2.columnconfigure(2, weight=1)

        f2.rowconfigure(0, weight=1)
        f2.rowconfigure(1, weight=1)
       
    def plotButtonPressed(self,number):
        trialNum = self.trialEntry.get()
        
        try:
            trialNum = int(trialNum)
            
            print(EguanaModel().machine.ifTrialExists(trialNum))
            if EguanaModel().machine.ifTrialExists(trialNum):
                self.plotFigure(number)
                return True             
            else:
                messagebox.showerror(
                    "Trial Number Error",
                    "The trial doesn't exist"
                    )     
                return False
        except ValueError:
            messagebox.showerror(
                "Trial Number Error",
                "Error with the trial number"
            )  
            return False
            
    def plotFigure(self,number):
        m =  CoilNumDialog(self.frame)
        if m.isSet():
            print(m.getValues())
            EguanaModel().machine.getDataForTrialNumber(number)
        
    def selectFilter(self):        
        ffPopup = FilterFunctionPopup(self)
        if ffPopup.selectedFilter is not None:
            EguanaModel().filterFunction = ffPopup.selectedFilter
            ftPopup = FilterTypePopup(self,ffPopup.selectedFilter)
            if (ftPopup.selectedHeadFilterType is not None) and (ftPopup.selectedHeadFilterType is not None):
                self.menubar.setSelectedFilters(ffPopup.selectedFilter,ftPopup.selectedHeadFilterType,ftPopup.selectedJawFilterType)
                EguanaModel().filterTypeHead = ftPopup.selectedHeadFilterType
                EguanaModel().filterTypeJaw = ftPopup.selectedJawFilterType
                EguanaModel().filterFunction = ffPopup.selectedFilter
                buttonText = '{} - Jaw Filter : {} - Head Filter {}'.format(ffPopup.selectedFilter.name,ftPopup.selectedJawFilterType.name, ftPopup.selectedHeadFilterType.name)
                self.filterButton.config(text=buttonText)


    def updateSelectedFilters(self,ffName,ftHeadName,ftJawName): 
        buttonText = '{} - Jaw Filter : {} - Head Filter {}'.format(ffName,ftHeadName,ftJawName)
        self.filterButton.config(text=buttonText)

    def changeImage(self):
        self.photo = PhotoImage(file=self.photoName)
        self.photo = self.photo.subsample(2);
        self.photo_label.image = self.photo  
        self.photo_label.config(image=self.photo)
        
        
        
    def cursorPosition(self,event):       
        if event.widget ==  self.openButton3D:
            if self.photoName == "eguana2.gif":
                self.photoName = "eguana.gif"
                self.changeImage()
                
        elif event.widget ==  self.openButton2D:
            if self.photoName == "eguana.gif":
                self.photoName = "eguana2.gif"
                self.changeImage()