Esempio n. 1
0
    def __create_module_button(self, module, window):
        module_button = Button(window,
                               text=f"{module.module_type}\n({module.id})")

        module_type = str(module.__class__)
        if 'output' in module_type:
            color = "orange"
        elif 'input' in module_type:
            color = "purple"
        else:
            color = "yellow"
        module_button.configure(bg=color,
                                command=lambda: self.__change_module(module))
        # TODO: Update button position as the module changes its position
        module_button.place(
            x=170 + 60 * module.position[0],
            y=180 - 40 * module.position[1],
            width=60,
            height=40,
        )
        # module button list
        self._modules.append(module_button)
Esempio n. 2
0
class RoundSettings:
    def __init__(self):
        self.win = tk.Tk()
        self.win.title("Round Settings")
        self.choose_frame = tk.Frame(self.win)
        self.confirm_frame = tk.Frame(self.win, width=100)
        self.frame1 = tk.Frame(self.choose_frame)
        self.frame2 = tk.Frame(self.choose_frame)
        self.frame3 = tk.Frame(self.choose_frame)
        self.first_hint = tk.Label(self.frame1,
                                   text="Choose which side will play first")
        self.me_first = Button(self.frame1,
                               text="Me",
                               command=self.click_me_first)
        self.opponent_first = Button(self.frame1,
                                     text="Opponent",
                                     command=self.click_opponent_first)
        self.player_hint = tk.Label(self.frame2,
                                    text="Choose which side you will play for")
        self.for_black = Button(self.frame2,
                                text="Black Chess",
                                command=self.click_for_black)
        self.for_white = Button(self.frame2,
                                text="White Chess",
                                command=self.click_for_white)
        self.up_hint = tk.Label(self.frame3,
                                text="Choose which side will on the upper")
        self.white_up = Button(self.frame3,
                               text="White Chess",
                               command=self.click_white_up)
        self.black_up = Button(self.frame3,
                               text="Black Chess",
                               command=self.click_black_up)
        self.confirm_button = tk.Button(self.confirm_frame,
                                        width=10,
                                        height=10,
                                        text='play',
                                        command=self.click_confirm)

    def choose(self):
        self.first_hint.pack(side=tk.TOP)
        self.me_first.pack(side=tk.LEFT)
        self.opponent_first.pack(side=tk.RIGHT)
        self.player_hint.pack(side=tk.TOP)
        self.for_black.pack(side=tk.LEFT)
        self.for_white.pack(side=tk.RIGHT)
        self.up_hint.pack(side=tk.TOP)
        self.white_up.pack(side=tk.LEFT)
        self.black_up.pack(side=tk.RIGHT)
        self.confirm_button.pack()
        self.frame1.pack()
        self.frame2.pack()
        self.frame3.pack()
        self.choose_frame.pack(side=tk.LEFT)
        self.confirm_frame.pack(side=tk.RIGHT)
        self.win.mainloop()

    def click_me_first(self):
        global first_player
        first_player = 'me'
        self.me_first.configure(fg='white', bg='deepskyblue')
        self.opponent_first.configure(fg='black', bg='white')

    def click_opponent_first(self):
        global first_player
        first_player = 'opponent'
        self.opponent_first.configure(fg='white', bg='deepskyblue')
        self.me_first.configure(fg='black', bg='white')

    def click_for_black(self):
        global side
        side = 'black'
        self.for_black.configure(fg='white', bg='deepskyblue')
        self.for_white.configure(fg='black', bg='white')

    def click_for_white(self):
        global side
        side = 'white'
        self.for_white.configure(fg='white', bg='deepskyblue')
        self.for_black.configure(fg='black', bg='white')

    def click_white_up(self):
        global upper_chess
        upper_chess = 'white'
        self.white_up.configure(fg='white', bg='deepskyblue')
        self.black_up.configure(fg='black', bg='white')

    def click_black_up(self):
        global upper_chess
        upper_chess = 'black'
        self.black_up.configure(fg='white', bg='deepskyblue')
        self.white_up.configure(fg='black', bg='white')

    def click_confirm(self):
        self.win.destroy()
Esempio n. 3
0
def app():
    # begin gui
    global root
    root = tk.Tk()

    # root window
    root.title("Runkeeper")
    root.geometry("530x300+1300+290")
    root.configure(bg="#2c6b6f")

    # greeting labels
    greeting1 = tk.Label(root, text="Add Data")
    greeting1.configure(bg="#2c6b6f",
                        fg="white",
                        font=("Open Sans", 18),
                        pady=16)
    greeting1.grid(row=0, column=1, sticky=tk.N)

    greeting2 = tk.Label(root, text="Enter info below:")
    greeting2.configure(bg="#2c6b6f",
                        fg="white",
                        font=("Open Sans", 14),
                        pady=4)
    greeting2.grid(row=1, column=1)

    greeting3 = tk.Label(root, text="See Running Statistics")
    greeting3.configure(bg="#2c6b6f",
                        fg="white",
                        font=("Open Sans", 18),
                        pady=16)
    greeting3.grid(row=0, column=3, sticky=tk.N)

    greeting2 = tk.Label(root, text="Analysis options:")
    greeting2.configure(bg="#2c6b6f",
                        fg="white",
                        font=("Open Sans", 14),
                        pady=4)
    greeting2.grid(row=1, column=3)

    # spacer
    blank1 = tk.Label(root, text="space")
    blank1.configure(bg="#2c6b6f", fg="#2c6b6f")
    blank1.grid(row=0, column=2)

    # status label
    global status
    status = tk.Label(root, text="Welcome to Runkeeper!")
    status.configure(bg="#2c6b6f", fg="white", font=("Open Sans", 14), pady=4)
    status.grid(row=6, column=1)

    # item labels
    labels = [
        tk.Label(root, text="Date"),
        tk.Label(root, text="Distance"),
        tk.Label(root, text="Duration")
    ]

    labels[0].grid(row=2)
    labels[1].grid(row=3)
    labels[2].grid(row=4)

    labels[0].configure(bg="#2c6b6f",
                        fg="white",
                        font=("Open Sans", 14),
                        padx=5,
                        pady=4)
    labels[1].configure(bg="#2c6b6f",
                        fg="white",
                        font=("Open Sans", 14),
                        padx=5,
                        pady=4)
    labels[2].configure(bg="#2c6b6f",
                        fg="white",
                        font=("Open Sans", 14),
                        padx=5,
                        pady=4)

    # entry boxes
    global e1, e2, e3
    e1 = tk.Entry(root)
    e2 = tk.Entry(root)
    e3 = tk.Entry(root)

    e1.insert(0, "10/21/21")
    e2.insert(0, "3.52")
    e3.insert(0, "22:17")

    e1.configure(fg="#808080")
    e2.configure(fg="#808080")
    e3.configure(fg="#808080")

    e1.grid(row=2, column=1)
    e2.grid(row=3, column=1)
    e3.grid(row=4, column=1)

    e1.bind('<FocusIn>', entry_click1)
    e2.bind('<FocusIn>', entry_click2)
    e3.bind('<FocusIn>', entry_click3)

    # submit button
    submitButton = Button(root, text='Submit', command=submit, borderless=1)
    submitButton.configure(pady=4,
                           bg="white",
                           fg="black",
                           font=("Open Sans", 14))
    submitButton.grid(row=5, column=1, pady=4)

    # total distance button
    submitButton = Button(root,
                          text='Total Distance',
                          command=grab_dist,
                          borderless=1)
    submitButton.configure(pady=4,
                           bg="white",
                           fg="black",
                           font=("Open Sans", 14))
    submitButton.grid(row=2, column=3)

    # average pace button
    submitButton = Button(root,
                          text='Average Pace',
                          command=grab_avgpace,
                          borderless=1)
    submitButton.configure(pady=4,
                           bg="white",
                           fg="black",
                           font=("Open Sans", 14))
    submitButton.grid(row=3, column=3)

    # total time button
    submitButton = Button(root,
                          text='Total Time',
                          command=grab_totaltime,
                          borderless=1)
    submitButton.configure(pady=4,
                           bg="white",
                           fg="black",
                           font=("Open Sans", 14))
    submitButton.grid(row=4, column=3)

    # data analysis text
    stats_greeting = tk.Label(root, text="Stats:")
    stats_greeting.configure(bg="#2c6b6f", fg="white", font=("Open Sans", 14))
    stats_greeting.grid(row=5, column=3, pady=8)

    global stats_text
    stats_text = tk.Label(
        root, text="Press a button to view \nyour running statistics.")
    stats_text.configure(bg="#2c6b6f", fg="white", font=("Open Sans", 14))
    stats_text.grid(row=6, column=3, pady=8)

    # keep running until window closed
    root.mainloop()  # keep running until window closed
Esempio n. 4
0
class GoGUIPlayer():

    ## Decorators
    def valid_stone(func):
        def wrapper(*args, **kwargs):
            if not args[1] or not isinstance(args[1], StoneEnum):
                raise Exception("GPB: Invalid parameter, bad stone passed.")
                return func(*args, **kwargs)
            return wrapper

    def protocol_registered(func):
        def wrapper(*args, **kwargs):
            if not args[0].name:
                raise Exception(
                    "GPB: Invalid protocol, player must be registered first.")
                return func(*args, **kwargs)
            return wrapper

    def protocol_stone_set(func):
        def wrapper(*args, **kwargs):
            if not args[0].stone_type:
                raise Exception(
                    "GPB: Invalid protocol, stone must be received first.")
                return func(*args, **kwargs)
            return wrapper

    # Constructor
    def __init__(self, name=None):
        self.name = name
        self.default_name = "Player 1"
        self.stone_type = None
        self.color = ""
        self.move_referee = MoveReferee()
        self.click = None

        # Creates self.root window
        self.root = Tk()
        self.root.title("Go Game GUI")
        self.root.resizable(0, 0)
        self.root.geometry('1000x1000')

        self.e = Entry(self.root,
                       text="ENTER YOUR NAME HERE",
                       width=20,
                       borderwidth=5,
                       bg="yellow",
                       fg="black")
        self.e.grid(row=0, column=0, columnspan=7)

        self.e1 = Entry(self.root,
                        width=20,
                        borderwidth=5,
                        bg="yellow",
                        fg="black")
        self.e1.grid(row=10, column=0, columnspan=7)

        self.button_register = Button(self.root,
                                      text="Register",
                                      command=self.myClick)
        self.button_move = Button(self.root,
                                  text="Make Move",
                                  command=self.myMove)
        self.pass_move = Button(self.root, text="Pass", command=self.Pass)
        self.button_register.grid(row=0, column=10, columnspan=1)
        self.button_move.grid(row=10, column=10, columnspan=1)
        self.pass_move.grid(row=9, column=10, columnspan=1)

        self.buttons = dict()
        for x in range(1, BOARD_DIM + 1):
            for y in range(1, BOARD_DIM + 1):
                button_num = "{}-{}".format(y, x)
                self.buttons["{}-{}".format(y, x)] = Button(
                    self.root,
                    text=" ",
                    bg="goldenrod",
                    padx=0.0,
                    pady=20,
                    command=lambda butt=button_num: self.button_click(butt))
                self.buttons["{}-{}".format(y, x)].grid(row=x,
                                                        column=y,
                                                        columnspan=1)

    def myClick(self):
        self.name = self.e.get()
        hello = "Welcome to Go, " + self.name
        myLabel = Label(self.root, text=hello)
        myLabel.grid(row=0, column=0, columnspan=3)
        self.button_register.configure(state=DISABLED)

    def button_click(self, button_idx):
        if self.name:
            self.click = button_idx
            self.buttons[self.click].configure(bg=self.color)

    def myMove(self):
        if self.name:
            self.click = self.e1.get()

    def Pass(self):
        if self.name:
            self.click = "pass"

    def register(self):
        while not self.name:
            self.root.update()
            self.root.update_idletasks()
        return self.name

    def receive_stone(self, stone_type):
        self.stone_type = stone_type
        if stone_type == StoneEnum.BLACK:
            self.color = "black"
        else:
            self.color = "white"

    def choose_move(self, boards):
        if not self.move_referee.valid_history(self.stone_type, boards):
            return "This history makes no sense!"
        else:
            board = boards[0]
            for x in range(len(board)):
                for y in range(len(board[0])):
                    if board[x][y].get_raw() == WHITE_STONE:
                        self.buttons["{}-{}".format(x + 1, y +
                                                    1)].configure(bg="white")
                    elif board[x][y].get_raw() == BLACK_STONE:
                        self.buttons["{}-{}".format(x + 1, y +
                                                    1)].configure(bg="black")
                    else:
                        self.buttons["{}-{}".format(
                            x + 1, y + 1)].configure(bg="goldenrod")

            while not self.click:
                self.root.update()
                self.root.update_idletasks()
            if self.click == "pass":
                self.click = None
                return PASS

            ret = str_to_point(self.click)
            #if not self.move_referee.valid_move(stone_type=self.stone_type, point=ret, boards=boards, current_board=board):
            #	raise Exception("Invalid point.")
            self.click = None
            return (ret.x, ret.y)