Ejemplo n.º 1
0
    def append_row_to_grid(self, grid, rows, mio):
        # update delete button
        if not rows:
            bt_del = getattr(self, "bt_del_" + mio)
            bt_del.config(state="normal")

        row = len(rows)

        l = Label(grid, text=str(row) + ":")
        l.grid(row=row, column=0, sticky="NES")

        v = StringVar()
        e = HKEntry(grid, textvariable=v)
        e.grid(row=row, column=1, sticky="NEWS")

        row_desc = (l, e, v)

        rows.append(row_desc)

        return row_desc
Ejemplo n.º 2
0
    def __create_content(self):
        self.__rootFrame = TKTk()
        self.__rootFrame.withdraw()

        self.__top = TKToplevel(self.__rootFrame)
        self.__top.title("Login")
        self.__top.protocol("WM_DELETE_WINDOW", self.__rootFrame.destroy)

        self.__top.bind('<Return>', self.__enter_action)

        self.__top.update_idletasks()
        width = self.__top.winfo_width()
        height = self.__top.winfo_height()
        x = (self.__top.winfo_screenwidth() // 2) - (width // 2)
        y = (self.__top.winfo_screenheight() // 2) - (height // 2)

        self.__top.geometry("+%d+%d" % (x, y))

        row = 0
        expLabel = TKLabel(self.__top, text='Login to host:')
        expLabel.grid(row=row, column=0, columnspan=4, padx=5, pady=2)

        row = row + 1
        urlLabel = TKLabel(self.__top, text=self.__host)
        urlLabel.grid(row=row, column=0, columnspan=4, padx=5, pady=2)

        row = row + 1
        usrLabel = TKLabel(self.__top, text='User')
        usrLabel.grid(row=row, column=0, columnspan=2, padx=20, pady=5)
        self.__usrEntry = TKEntry(self.__top, width=20)
        self.__usrEntry.grid(row=row, column=2, columnspan=2, padx=5, pady=5)

        row = row + 1
        pwdLabel = TKLabel(self.__top, text='Password')
        pwdLabel.grid(row=row, column=0, columnspan=2, padx=20, pady=5)
        self.__pwdEntry = TKEntry(self.__top, width=20, show="*")
        self.__pwdEntry.grid(row=row, column=2, columnspan=2, padx=5, pady=5)

        row = row + 1
        cancelButton = TKButton(self.__top,
                                text='Cancel',
                                command=self.__cancel_action)
        cancelButton.grid(row=row, column=1, padx=5, pady=5)
        loginButton = TKButton(self.__top,
                               text='Login',
                               command=self.__login_action)
        loginButton.grid(row=row, column=2, padx=5, pady=5)
Ejemplo n.º 3
0
    def __create_content(self):
        self.__rootFrame = TKTk()
        self.__rootFrame.withdraw()

        self.__top = TKToplevel(self.__rootFrame)
        self.__top.title("Login")
        self.__top.protocol("WM_DELETE_WINDOW", self.__rootFrame.destroy)

        self.__top.bind('<Return>', self.__enter_action)

        self.__top.update_idletasks()
        width = self.__top.winfo_width()
        height = self.__top.winfo_height()
        x = (self.__top.winfo_screenwidth() // 2) - (width // 2)
        y = (self.__top.winfo_screenheight() // 2) - (height // 2)

        self.__top.geometry("+%d+%d" % (x, y))

        row = 0
        expLabel = TKLabel(self.__top, text='Login to host:')
        expLabel.grid(row=row, column=0, columnspan=4, padx=5, pady=2)

        row = row+1
        urlLabel = TKLabel(self.__top, text=self.__host)
        urlLabel.grid(row=row, column=0, columnspan=4, padx=5, pady=2)

        row = row+1
        usrLabel = TKLabel(self.__top, text='User')
        usrLabel.grid(row=row, column=0, columnspan=2, padx=20, pady=5)
        self.__usrEntry = TKEntry(self.__top, width=20)
        self.__usrEntry.grid(row=row, column=2, columnspan=2, padx=5, pady=5)

        row = row+1
        pwdLabel = TKLabel(self.__top, text='Password')
        pwdLabel.grid(row=row, column=0, columnspan=2, padx=20, pady=5)
        self.__pwdEntry = TKEntry(self.__top, width=20, show="*")
        self.__pwdEntry.grid(row=row, column=2, columnspan=2, padx=5, pady=5)

        row = row+1
        cancelButton = TKButton(self.__top, text='Cancel', command=self.__cancel_action)
        cancelButton.grid(row=row, column=1, padx=5, pady=5)
        loginButton = TKButton(self.__top, text='Login', command=self.__login_action)
        loginButton.grid(row=row, column=2, padx=5, pady=5)
Ejemplo n.º 4
0
    def __init__(self, master, columns, column_weights=None, cnf={}, **kw):
        """
        Construct a new multi-column listbox widget.

        :param master: The widget that should contain the new
            multi-column listbox.

        :param columns: Specifies what columns should be included in
            the new multi-column listbox.  If ``columns`` is an integer,
            the it is the number of columns to include.  If it is
            a list, then its length indicates the number of columns
            to include; and each element of the list will be used as
            a label for the corresponding column.

        :param cnf, kw: Configuration parameters for this widget.
            Use ``label_*`` to configure all labels; and ``listbox_*``
            to configure all listboxes.  E.g.:

                >>> mlb = MultiListbox(master, 5, label_foreground='red')
        """
        # If columns was specified as an int, convert it to a list.
        if isinstance(columns, int):
            columns = list(range(columns))
            include_labels = False
        else:
            include_labels = True

        if len(columns) == 0:
            raise ValueError("Expected at least one column")

        # Instance variables
        self._column_names = tuple(columns)
        self._listboxes = []
        self._labels = []

        # Pick a default value for column_weights, if none was specified.
        if column_weights is None:
            column_weights = [1] * len(columns)
        elif len(column_weights) != len(columns):
            raise ValueError('Expected one column_weight for each column')
        self._column_weights = column_weights

        # Configure our widgets.
        Frame.__init__(self, master, **self.FRAME_CONFIG)
        self.grid_rowconfigure(1, weight=1)
        for i, label in enumerate(self._column_names):
            self.grid_columnconfigure(i, weight=column_weights[i])

            # Create a label for the column
            if include_labels:
                l = Label(self, text=label, **self.LABEL_CONFIG)
                self._labels.append(l)
                l.grid(column=i, row=0, sticky='news', padx=0, pady=0)
                l.column_index = i

            # Create a listbox for the column
            lb = Listbox(self, **self.LISTBOX_CONFIG)
            self._listboxes.append(lb)
            lb.grid(column=i, row=1, sticky='news', padx=0, pady=0)
            lb.column_index = i

            # Clicking or dragging selects:
            lb.bind('<Button-1>', self._select)
            lb.bind('<B1-Motion>', self._select)
            # Scroll whell scrolls:
            lb.bind('<Button-4>', lambda e: self._scroll(-1))
            lb.bind('<Button-5>', lambda e: self._scroll(+1))
            lb.bind('<MouseWheel>', lambda e: self._scroll(e.delta))
            # Button 2 can be used to scan:
            lb.bind('<Button-2>', lambda e: self.scan_mark(e.x, e.y))
            lb.bind('<B2-Motion>', lambda e: self.scan_dragto(e.x, e.y))
            # Dragging outside the window has no effect (diable
            # the default listbox behavior, which scrolls):
            lb.bind('<B1-Leave>', lambda e: 'break')
            # Columns can be resized by dragging them:
            l.bind('<Button-1>', self._resize_column)

        # Columns can be resized by dragging them.  (This binding is
        # used if they click on the grid between columns:)
        self.bind('<Button-1>', self._resize_column)

        # Set up key bindings for the widget:
        self.bind('<Up>', lambda e: self.select(delta=-1))
        self.bind('<Down>', lambda e: self.select(delta=1))
        self.bind('<Prior>', lambda e: self.select(delta=-self._pagesize()))
        self.bind('<Next>', lambda e: self.select(delta=self._pagesize()))

        # Configuration customizations
        self.configure(cnf, **kw)
Ejemplo n.º 5
0
class AuthUI(object):
    def __init__(self, parent, app):
        parent.title('Auth window')

        self.parent = parent
        self.root = app

        # Widget Initialization
        self._label_header = Label(
            parent,
            font="{Segoe UI} 20 bold",
            foreground="#ff0000",
            text="Trakt Account Authorization",
        )
        self._button_get_code = Button(
            parent,
            font="{MS Sans Serif} 12 bold",
            text="Get PIN Code",
        )
        self._label_enter_code = Label(
            parent,
            font="{MS Sans Serif} 14",
            text="Enter the code:",
        )
        self._label_click = Label(
            parent,
            font="{MS Sans Serif} 14",
            text="Click the button to get a code:",
        )
        self.pin_code = StringVar()
        self._entry_code = Entry(
            parent,
            font="{MS Sans Serif} 14 bold",
            width=10,
            justify="center",
            textvariable=self.pin_code,
            state="disabled",
        )
        self._button_done = Button(
            parent,
            borderwidth=3,
            font="{MS Sans Serif} 12 bold",
            text="Done",
            state="disabled",
        )

        # widget commands
        self._button_get_code.configure(command=self.button_get_code_command)
        self._button_done.configure(command=self.button_done_command)

        # Geometry Management
        self._label_header.grid(in_=parent,
                                column=1,
                                row=1,
                                columnspan=1,
                                ipadx=0,
                                ipady=0,
                                padx=0,
                                pady=0,
                                rowspan=1,
                                sticky="ew")
        self._label_click.grid(in_=parent,
                               column=1,
                               row=2,
                               columnspan=1,
                               ipadx=0,
                               ipady=0,
                               padx=0,
                               pady=0,
                               rowspan=1,
                               sticky="")
        self._button_get_code.grid(in_=parent,
                                   column=1,
                                   row=3,
                                   columnspan=1,
                                   ipadx=0,
                                   ipady=0,
                                   padx=0,
                                   pady=0,
                                   rowspan=1,
                                   sticky="")
        self._label_enter_code.grid(in_=parent,
                                    column=1,
                                    row=4,
                                    columnspan=1,
                                    ipadx=0,
                                    ipady=0,
                                    padx=0,
                                    pady=0,
                                    rowspan=1,
                                    sticky="")
        self._entry_code.grid(in_=parent,
                              column=1,
                              row=5,
                              columnspan=1,
                              ipadx=5,
                              ipady=0,
                              padx=5,
                              pady=0,
                              rowspan=1,
                              sticky="")
        self._button_done.grid(in_=parent,
                               column=1,
                               row=6,
                               columnspan=1,
                               ipadx=0,
                               ipady=0,
                               padx=0,
                               pady=0,
                               rowspan=1,
                               sticky="")

        # Resize Behavior
        parent.resizable(False, False)
        parent.grid_rowconfigure(1, weight=1, minsize=40, pad=10)
        parent.grid_rowconfigure(2, weight=1, minsize=40, pad=10)
        parent.grid_rowconfigure(3, weight=1, minsize=40, pad=10)
        parent.grid_rowconfigure(4, weight=1, minsize=40, pad=10)
        parent.grid_rowconfigure(5, weight=1, minsize=50, pad=10)
        parent.grid_rowconfigure(6, weight=1, minsize=50, pad=10)
        parent.grid_columnconfigure(1, weight=1, minsize=0, pad=10)
Ejemplo n.º 6
0
    def __init__(self, master, columns, column_weights=None, cnf={}, **kw):
        """
        Construct a new multi-column listbox widget.

        :param master: The widget that should contain the new
            multi-column listbox.

        :param columns: Specifies what columns should be included in
            the new multi-column listbox.  If ``columns`` is an integer,
            the it is the number of columns to include.  If it is
            a list, then its length indicates the number of columns
            to include; and each element of the list will be used as
            a label for the corresponding column.

        :param cnf, kw: Configuration parameters for this widget.
            Use ``label_*`` to configure all labels; and ``listbox_*``
            to configure all listboxes.  E.g.:

                >>> mlb = MultiListbox(master, 5, label_foreground='red')
        """
        # If columns was specified as an int, convert it to a list.
        if isinstance(columns, int):
            columns = list(range(columns))
            include_labels = False
        else:
            include_labels = True

        if len(columns) == 0:
            raise ValueError("Expected at least one column")

        # Instance variables
        self._column_names = tuple(columns)
        self._listboxes = []
        self._labels = []

        # Pick a default value for column_weights, if none was specified.
        if column_weights is None:
            column_weights = [1] * len(columns)
        elif len(column_weights) != len(columns):
            raise ValueError('Expected one column_weight for each column')
        self._column_weights = column_weights

        # Configure our widgets.
        Frame.__init__(self, master, **self.FRAME_CONFIG)
        self.grid_rowconfigure(1, weight=1)
        for i, label in enumerate(self._column_names):
            self.grid_columnconfigure(i, weight=column_weights[i])

            # Create a label for the column
            if include_labels:
                l = Label(self, text=label, **self.LABEL_CONFIG)
                self._labels.append(l)
                l.grid(column=i, row=0, sticky='news', padx=0, pady=0)
                l.column_index = i

            # Create a listbox for the column
            lb = Listbox(self, **self.LISTBOX_CONFIG)
            self._listboxes.append(lb)
            lb.grid(column=i, row=1, sticky='news', padx=0, pady=0)
            lb.column_index = i

            # Clicking or dragging selects:
            lb.bind('<Button-1>', self._select)
            lb.bind('<B1-Motion>', self._select)
            # Scroll whell scrolls:
            lb.bind('<Button-4>', lambda e: self._scroll(-1))
            lb.bind('<Button-5>', lambda e: self._scroll(+1))
            lb.bind('<MouseWheel>', lambda e: self._scroll(e.delta))
            # Button 2 can be used to scan:
            lb.bind('<Button-2>', lambda e: self.scan_mark(e.x, e.y))
            lb.bind('<B2-Motion>', lambda e: self.scan_dragto(e.x, e.y))
            # Dragging outside the window has no effect (diable
            # the default listbox behavior, which scrolls):
            lb.bind('<B1-Leave>', lambda e: 'break')
            # Columns can be resized by dragging them:
            l.bind('<Button-1>', self._resize_column)

        # Columns can be resized by dragging them.  (This binding is
        # used if they click on the grid between columns:)
        self.bind('<Button-1>', self._resize_column)

        # Set up key bindings for the widget:
        self.bind('<Up>', lambda e: self.select(delta=-1))
        self.bind('<Down>', lambda e: self.select(delta=1))
        self.bind('<Prior>', lambda e: self.select(delta=-self._pagesize()))
        self.bind('<Next>', lambda e: self.select(delta=self._pagesize()))

        # Configuration customizations
        self.configure(cnf, **kw)
class ShipPlacementPanel(Frame):
    '''A frame which contains visualizations for placing ships.'''

    # the size of a single tile
    SHIP_TILE_SIZE = 20
    SHIP_TILE_COLOR = "steel blue"
    TAG = "staging_ship"
    CANVAS_WIDTH = 150

    def __init__(self, master):
        '''Create a new panel with the given parent.'''

        Frame.__init__(self, master)
        self._ship_name = StringVar()
        self._create_ui()
        self.reset()

    def reset(self):
        '''Alias for unstage_all'''

        self.unstage_all()

    def _create_ui(self):
        '''Create all UI objects.'''

        #self._tl = Label(self, text="Staged Ship", f)
        self._sl = Label(self, textvariable=self._ship_name)
        self._c = Canvas(self)
        self._c.config(width=self.CANVAS_WIDTH)
        self._rb = Button(self,
                          text="Rotate",
                          command=self.rotate_current_ship)

        self.pack_ui()

    def pack_ui(self):
        '''(re) pack the UI.
        Created mostly to counter hiding by unpacking.'''

        #self._tl.pack()
        #self._tl.grid(row=0)
        self._sl.pack()
        self._sl.grid(row=1, pady=10)
        self._c.pack()
        self._c.grid(row=2, pady=15)
        self._rb.pack()
        self._rb.grid(row=3)

    def unstage_all(self):
        '''Remove all ships from staging area.
        Clear all staging preferences.'''

        self._staged_ship = None
        self._clear_staging_grid()
        self._ship_name.set("")
        self._disable_rotate_button()

    def _clear_staging_grid(self):
        '''Remove previously staged ships from staging grid.'''

        for item in self._c.find_withtag(self.TAG):
            self._c.delete(item)

    def _draw_staged_ship(self):
        '''Draw the currently staged ship.'''

        # remove prior drawings
        self._clear_staging_grid()

        if self._staged_ship.is_vertical():
            x = 0
            x_pad = (self._c.winfo_width() - self.SHIP_TILE_SIZE) / 2.0
            y_pad = (self._c.winfo_height() -
                     self.SHIP_TILE_SIZE * self._staged_ship.get_size()) / 2.0

            for y in range(self._staged_ship.get_size()):
                self._draw_ship_tile(x_pad + x * self.SHIP_TILE_SIZE,
                                     y_pad + y * self.SHIP_TILE_SIZE)
        else:
            y = 0
            x_pad = (self._c.winfo_width() -
                     self.SHIP_TILE_SIZE * self._staged_ship.get_size()) / 2.0
            y_pad = (self._c.winfo_height() - self.SHIP_TILE_SIZE) / 2.0

            for x in range(self._staged_ship.get_size()):
                self._draw_ship_tile(x_pad + x * self.SHIP_TILE_SIZE,
                                     y_pad + y * self.SHIP_TILE_SIZE)

    def add_ship(self, s):
        '''Alias for stage ship.'''

        self.stage_ship(s)

    def _disable_rotate_button(self):
        '''Disable / hide the rotate button.'''

        self._rb.grid_forget()

    def _enable_rotate_button(self):
        '''Enable / show the rotate button.'''

        self._rb.grid(row=3)

    def stage_ship(self, s):
        '''Add a ship to the staging area. 
        Display what it would look like on the grid.
        Create support for accidentally adding ship that isn't ready'''

        if s is not None:
            self._staged_ship = s
            self._ship_name.set(s.get_full_name().title())
            self._draw_staged_ship()

            self._enable_rotate_button()
        else:
            self._disable_rotate_button()

    def _draw_ship_tile(self, x, y):
        '''Draw a single tile for the ship at given coordinates.'''

        self._c.create_rectangle(x,
                                 y,
                                 x + self.SHIP_TILE_SIZE,
                                 y + self.SHIP_TILE_SIZE,
                                 fill=self.SHIP_TILE_COLOR,
                                 outline="black",
                                 tag=self.TAG)

    def get_staged_ship(self):
        '''Return the currently staged ship.'''

        return self._staged_ship

    def rotate_current_ship(self):
        '''Rotate the currently staged ship.'''

        if self._staged_ship is not None:
            self._staged_ship.rotate()
            self._draw_staged_ship()
Ejemplo n.º 8
0
class MainUI(object):
    def __init__(self, parent, root):
        self.parent = parent
        self.root = root

        self.selectedStatus = False

        # Widget Initialization
        self._listbox = Listbox(
            parent,
            font="{Segoe UI} 10",
            height=0,
            selectmode="extended",
            state="normal",
            cursor="hand2",
            exportselection=False,
        )
        self._listbox_scrollbar = AutoScrollbar(self._listbox)
        self._lbl_help = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            text="Hold [Ctrl] to select multiple items",
        )
        self._label_header = Label(
            parent,
            font="{Segoe UI} 16 bold",
            text="Playback items available for removal",
        )
        self._label_actions = Label(
            parent,
            font="{Segoe UI} 14 bold",
            text="Actions",
        )
        self._label_info = Label(
            parent,
            font="{Segoe UI} 14 bold",
            text="Info",
        )
        self._btnRefresh = Button(
            parent,
            font="{Segoe UI} 12 bold",
            text="Refresh",
        )
        self._btnRemoveSelected = Button(
            parent,
            font="{Segoe UI} 12 bold",
            wraplength=175,
            text="Remove Selected",
        )
        self._btnSelectDeselectAll = Button(
            parent,
            font="{Segoe UI} 12 bold",
            wraplength=175,
            text="Select / Deselect All",
        )
        self._btnStopCurrentlyPlaying = Button(
            parent,
            font="{Segoe UI} 12 bold",
            # wraplength=80,
            text="Stop Currently Playing",
        )
        self._btnLogin = Button(
            parent,
            font="{Segoe UI} 12 bold",
            text="Login/Auth",
        )
        self._lbl_ID = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            text="ID:",
        )
        self._lbl_PausedAt = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            text="Paused At:",
        )
        self._lbl_Progress = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            text="Progress:",
        )
        self.lbl_showName = StringVar(value="Show:")
        self._lbl_Show = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            textvariable=self.lbl_showName,
        )
        self.lbl_season = StringVar(value="Season:")
        self._lbl_Season = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            textvariable=self.lbl_season,
        )
        self.lbl_episode = StringVar(value="Episode:")
        self._lbl_Episode = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            textvariable=self.lbl_episode,
        )
        self.lbl_episodeTitle = StringVar(value="Title:")
        self._lbl_Title = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            textvariable=self.lbl_episodeTitle,
        )
        self.txt_ID = StringVar()
        self._txtID = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_ID,
            width=0,
        )
        self.txt_paused_at = StringVar()
        self._txtPausedAt = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_paused_at,
            width=0,
        )
        self.txt_progress = StringVar()
        self._txtProgress = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_progress,
            width=0,
        )
        self.txt_showName = StringVar()
        self._txtShowName = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_showName,
            width=0,
        )
        self.txt_season = StringVar()
        self._txtSeason = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_season,
            width=0,
        )
        self.txt_episode = StringVar()
        self._txtEpisode = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_episode,
            width=0,
        )
        self.txt_title = StringVar()
        self._txtTitle = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_title,
            width=0,
        )
        self.lbl_loggedin = StringVar(value="")
        self._lbl_loggedin = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            textvariable=self.lbl_loggedin,
        )
        self._lbl_version = Label(
            parent,
            font="{Segoe UI Light} 10 bold",
            text="v%s" % app.__version__,
            foreground="blue",
            cursor="hand2",
        )

        # widget commands
        self._listbox.bind('<<ListboxSelect>>', self._listbox_onselect)
        self._listbox.config(yscrollcommand=self._listbox_scrollbar.set)
        self._listbox_scrollbar.config(orient='vertical',
                                       command=self._listbox.yview)
        self._btnRefresh.configure(command=self._btn_refresh_command)
        self._btnRemoveSelected.configure(
            command=self._btn_remove_selected_command)
        self._btnSelectDeselectAll.configure(
            command=self._btn_toggle_selection_command)
        self._btnStopCurrentlyPlaying.configure(
            command=self._btn_stop_currently_playing)
        self._btnLogin.configure(command=self._btn_login_command)
        self._lbl_version.bind('<Button-1>', self._open_repo)

        # Geometry Management
        self._listbox.grid(in_=parent,
                           column=4,
                           row=2,
                           columnspan=1,
                           ipadx=0,
                           ipady=0,
                           padx=5,
                           pady=5,
                           rowspan=10,
                           sticky="nsew")
        self._listbox.columnconfigure(0, weight=1)
        self._listbox.rowconfigure(0, weight=1)
        self._listbox_scrollbar.grid(column=4, rowspan=10, sticky="ns")
        self._lbl_help.grid(in_=parent,
                            column=4,
                            row=11,
                            ipadx=0,
                            ipady=0,
                            padx=5,
                            pady=5,
                            sticky="nsew")
        self._label_header.grid(in_=parent,
                                column=4,
                                row=1,
                                columnspan=1,
                                ipadx=0,
                                ipady=0,
                                padx=0,
                                pady=0,
                                rowspan=1,
                                sticky="nsew")
        self._label_actions.grid(in_=parent,
                                 column=1,
                                 row=9,
                                 columnspan=3,
                                 ipadx=0,
                                 ipady=0,
                                 padx=0,
                                 pady=0,
                                 rowspan=1,
                                 sticky="nsew")
        self._label_info.grid(in_=parent,
                              column=1,
                              row=1,
                              columnspan=3,
                              ipadx=0,
                              ipady=0,
                              padx=0,
                              pady=0,
                              rowspan=1,
                              sticky="nsew")
        self._btnRefresh.grid(in_=parent,
                              column=1,
                              row=10,
                              columnspan=1,
                              ipadx=0,
                              ipady=0,
                              padx=0,
                              pady=0,
                              rowspan=1,
                              sticky="")
        self._btnRemoveSelected.grid(in_=parent,
                                     column=2,
                                     row=10,
                                     columnspan=1,
                                     ipadx=0,
                                     ipady=0,
                                     padx=0,
                                     pady=0,
                                     rowspan=1,
                                     sticky="")
        self._btnSelectDeselectAll.grid(in_=parent,
                                        column=3,
                                        row=10,
                                        columnspan=1,
                                        ipadx=0,
                                        ipady=0,
                                        padx=0,
                                        pady=0,
                                        rowspan=1,
                                        sticky="")
        self._btnStopCurrentlyPlaying.grid(in_=parent,
                                           column=2,
                                           row=11,
                                           columnspan=2,
                                           ipadx=0,
                                           ipady=0,
                                           padx=5,
                                           pady=0,
                                           rowspan=1,
                                           sticky="ne")
        self._btnLogin.grid(in_=parent,
                            column=2,
                            row=11,
                            columnspan=1,
                            ipadx=0,
                            ipady=0,
                            padx=0,
                            pady=0,
                            rowspan=1,
                            sticky="")
        # Hide the login button at first
        self._btnLogin.grid_remove()
        self._lbl_ID.grid(in_=parent,
                          column=1,
                          row=2,
                          columnspan=1,
                          ipadx=0,
                          ipady=0,
                          padx=0,
                          pady=7,
                          rowspan=1,
                          sticky="nsew")
        self._lbl_PausedAt.grid(in_=parent,
                                column=1,
                                row=3,
                                columnspan=1,
                                ipadx=0,
                                ipady=0,
                                padx=0,
                                pady=7,
                                rowspan=1,
                                sticky="nsew")
        self._lbl_Progress.grid(in_=parent,
                                column=1,
                                row=4,
                                columnspan=1,
                                ipadx=0,
                                ipady=0,
                                padx=0,
                                pady=7,
                                rowspan=1,
                                sticky="nsew")
        self._lbl_Show.grid(in_=parent,
                            column=1,
                            row=5,
                            columnspan=1,
                            ipadx=0,
                            ipady=0,
                            padx=0,
                            pady=7,
                            rowspan=1,
                            sticky="nsew")
        self._lbl_Season.grid(in_=parent,
                              column=1,
                              row=6,
                              columnspan=1,
                              ipadx=0,
                              ipady=0,
                              padx=0,
                              pady=7,
                              rowspan=1,
                              sticky="nsew")
        self._lbl_Episode.grid(in_=parent,
                               column=1,
                               row=7,
                               columnspan=1,
                               ipadx=0,
                               ipady=0,
                               padx=0,
                               pady=7,
                               rowspan=1,
                               sticky="nsew")
        self._lbl_Title.grid(in_=parent,
                             column=1,
                             row=8,
                             columnspan=1,
                             ipadx=0,
                             ipady=0,
                             padx=0,
                             pady=7,
                             rowspan=1,
                             sticky="nsew")
        self._txtID.grid(in_=parent,
                         column=2,
                         row=2,
                         columnspan=2,
                         ipadx=0,
                         ipady=0,
                         padx=5,
                         pady=7,
                         rowspan=1,
                         sticky="nsew")
        self._txtPausedAt.grid(in_=parent,
                               column=2,
                               row=3,
                               columnspan=2,
                               ipadx=0,
                               ipady=0,
                               padx=5,
                               pady=7,
                               rowspan=1,
                               sticky="nsew")
        self._txtProgress.grid(in_=parent,
                               column=2,
                               row=4,
                               columnspan=2,
                               ipadx=0,
                               ipady=0,
                               padx=5,
                               pady=7,
                               rowspan=1,
                               sticky="nsew")
        self._txtShowName.grid(in_=parent,
                               column=2,
                               row=5,
                               columnspan=2,
                               ipadx=0,
                               ipady=0,
                               padx=5,
                               pady=7,
                               rowspan=1,
                               sticky="nsew")
        self._txtSeason.grid(in_=parent,
                             column=2,
                             row=6,
                             columnspan=2,
                             ipadx=0,
                             ipady=0,
                             padx=5,
                             pady=7,
                             rowspan=1,
                             sticky="nsew")
        self._txtEpisode.grid(in_=parent,
                              column=2,
                              row=7,
                              columnspan=2,
                              ipadx=0,
                              ipady=0,
                              padx=5,
                              pady=7,
                              rowspan=1,
                              sticky="nsew")
        self._txtTitle.grid(in_=parent,
                            column=2,
                            row=8,
                            columnspan=2,
                            ipadx=0,
                            ipady=0,
                            padx=5,
                            pady=7,
                            rowspan=1,
                            sticky="nsew")
        self._lbl_loggedin.grid(in_=parent,
                                column=1,
                                row=11,
                                columnspan=2,
                                ipadx=0,
                                ipady=0,
                                padx=5,
                                pady=5,
                                rowspan=1,
                                sticky="sw")
        self._lbl_version.grid(in_=parent,
                               column=1,
                               row=1,
                               columnspan=1,
                               ipadx=0,
                               ipady=0,
                               padx=0,
                               pady=0,
                               rowspan=1,
                               sticky="nw")

        # Resize Behavior
        parent.resizable(False, False)
        parent.grid_rowconfigure(1, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(2, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(3, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(4, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(5, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(6, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(7, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(8, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(9, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(10, weight=0, minsize=60, pad=0)
        parent.grid_rowconfigure(11, weight=0, minsize=30, pad=5)
        parent.grid_columnconfigure(1, weight=0, minsize=70, pad=5)
        parent.grid_columnconfigure(2, weight=0, minsize=175, pad=0)
        parent.grid_columnconfigure(3, weight=0, minsize=175, pad=0)
        parent.grid_columnconfigure(4, weight=0, minsize=400, pad=0)
Ejemplo n.º 9
0
class MainUI(object):
    def __init__(self, parent, app):
        parent.title('Trakt.tv Playback Progress Remover')

        self.parent = parent
        self.root = app

        self.selectedStatus = False

        # Widget Initialization
        self._listbox = Listbox(
            parent,
            font="{Segoe UI} 10",
            height=0,
            selectmode="extended",
            state="normal",
            cursor="hand2",
        )
        self._listbox_scrollbar = AutoScrollbar(self._listbox)
        self._label_header = Label(
            parent,
            font="{Segoe UI} 16 bold",
            text="Playback items available for removal",
        )
        self._label_actions = Label(
            parent,
            font="{Segoe UI} 14 bold",
            text="Actions",
        )
        self._label_info = Label(
            parent,
            font="{Segoe UI} 14 bold",
            text="Info",
        )
        self._btnRefresh = Button(
            parent,
            font="{Segoe UI} 12 bold",
            text="Refresh",
        )
        self._btnRemoveSelected = Button(
            parent,
            font="{Segoe UI} 12 bold",
            wraplength=120,
            text="Remove Selected",
        )
        self._btnSelectDeselectAll = Button(
            parent,
            font="{Segoe UI} 12 bold",
            wraplength=120,
            text="Select / Deselect All",
        )
        self._btnLogin = Button(
            parent,
            font="{Segoe UI} 12 bold",
            text="Login/Auth",
        )
        self._lbl_ID = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            text="ID:",
        )
        self._lbl_Progress = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            text="Progress:",
        )
        self.lbl_showName = StringVar(value="Show:")
        self._lbl_Show = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            textvariable=self.lbl_showName,
        )
        self.lbl_season = StringVar(value="Season:")
        self._lbl_Season = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            textvariable=self.lbl_season,
        )
        self.lbl_episode = StringVar(value="Episode:")
        self._lbl_Episode = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            textvariable=self.lbl_episode,
        )
        self.lbl_episodeTitle = StringVar(value="Title:")
        self._lbl_Title = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            textvariable=self.lbl_episodeTitle,
        )
        self.txt_ID = StringVar()
        self._txtID = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_ID,
            width=0,
        )
        self.txt_progress = StringVar()
        self._txtProgress = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_progress,
            width=0,
        )
        self.txt_showName = StringVar()
        self._txtShowName = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_showName,
            width=0,
        )
        self.txt_season = StringVar()
        self._txtSeason = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_season,
            width=0,
        )
        self.txt_episode = StringVar()
        self._txtEpisode = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_episode,
            width=0,
        )
        self.txt_title = StringVar()
        self._txtTitle = Entry(
            parent,
            font="{Segoe UI Light} 12",
            readonlybackground="#ffffff",
            relief="flat",
            state="readonly",
            textvariable=self.txt_title,
            width=0,
        )
        self.lbl_loggedin = StringVar(value="Not logged in.")
        self._lbl_loggedin = Label(
            parent,
            font="{Segoe UI Light} 12 bold",
            textvariable=self.lbl_loggedin,
        )

        # widget commands
        self._listbox.bind('<<ListboxSelect>>', self._listbox_onselect)
        self._listbox.config(yscrollcommand=self._listbox_scrollbar.set)
        self._listbox_scrollbar.config(orient='vertical',
                                       command=self._listbox.yview)
        self._btnRefresh.configure(command=self._btn_refresh_command)
        self._btnRemoveSelected.configure(
            command=self._btn_remove_selected_command)
        self._btnSelectDeselectAll.configure(
            command=self._btn_toggle_selection_command)
        self._btnLogin.configure(command=self._btn_login_command)

        # Geometry Management
        self._listbox.grid(in_=parent,
                           column=3,
                           row=2,
                           columnspan=1,
                           ipadx=0,
                           ipady=0,
                           padx=0,
                           pady=5,
                           rowspan=7,
                           sticky="nsew")
        self._listbox.columnconfigure(0, weight=1)
        self._listbox.rowconfigure(0, weight=1)
        self._listbox_scrollbar.grid(column=2, rowspan=7, sticky="ns")
        self._label_header.grid(in_=parent,
                                column=3,
                                row=1,
                                columnspan=1,
                                ipadx=0,
                                ipady=0,
                                padx=0,
                                pady=0,
                                rowspan=1,
                                sticky="nsew")
        self._label_actions.grid(in_=parent,
                                 column=4,
                                 row=1,
                                 columnspan=1,
                                 ipadx=0,
                                 ipady=0,
                                 padx=0,
                                 pady=0,
                                 rowspan=1,
                                 sticky="nsew")
        self._label_info.grid(in_=parent,
                              column=1,
                              row=1,
                              columnspan=2,
                              ipadx=0,
                              ipady=0,
                              padx=0,
                              pady=0,
                              rowspan=1,
                              sticky="nsew")
        self._btnRefresh.grid(in_=parent,
                              column=4,
                              row=6,
                              columnspan=1,
                              ipadx=0,
                              ipady=0,
                              padx=0,
                              pady=0,
                              rowspan=2,
                              sticky="")
        self._btnRemoveSelected.grid(in_=parent,
                                     column=4,
                                     row=2,
                                     columnspan=1,
                                     ipadx=0,
                                     ipady=0,
                                     padx=0,
                                     pady=0,
                                     rowspan=2,
                                     sticky="")
        self._btnSelectDeselectAll.grid(in_=parent,
                                        column=4,
                                        row=4,
                                        columnspan=1,
                                        ipadx=0,
                                        ipady=0,
                                        padx=0,
                                        pady=0,
                                        rowspan=2,
                                        sticky="")
        self._btnLogin.grid(in_=parent,
                            column=4,
                            row=7,
                            columnspan=1,
                            ipadx=0,
                            ipady=0,
                            padx=5,
                            pady=5,
                            rowspan=2,
                            sticky="es")
        self._lbl_ID.grid(in_=parent,
                          column=1,
                          row=2,
                          columnspan=1,
                          ipadx=0,
                          ipady=0,
                          padx=0,
                          pady=7,
                          rowspan=1,
                          sticky="nsew")
        self._lbl_Progress.grid(in_=parent,
                                column=1,
                                row=3,
                                columnspan=1,
                                ipadx=0,
                                ipady=0,
                                padx=0,
                                pady=7,
                                rowspan=1,
                                sticky="nsew")
        self._lbl_Show.grid(in_=parent,
                            column=1,
                            row=4,
                            columnspan=1,
                            ipadx=0,
                            ipady=0,
                            padx=0,
                            pady=7,
                            rowspan=1,
                            sticky="nsew")
        self._lbl_Season.grid(in_=parent,
                              column=1,
                              row=5,
                              columnspan=1,
                              ipadx=0,
                              ipady=0,
                              padx=0,
                              pady=7,
                              rowspan=1,
                              sticky="nsew")
        self._lbl_Episode.grid(in_=parent,
                               column=1,
                               row=6,
                               columnspan=1,
                               ipadx=0,
                               ipady=0,
                               padx=0,
                               pady=7,
                               rowspan=1,
                               sticky="nsew")
        self._lbl_Title.grid(in_=parent,
                             column=1,
                             row=7,
                             columnspan=1,
                             ipadx=0,
                             ipady=0,
                             padx=0,
                             pady=7,
                             rowspan=1,
                             sticky="nsew")
        self._txtID.grid(in_=parent,
                         column=2,
                         row=2,
                         columnspan=1,
                         ipadx=0,
                         ipady=0,
                         padx=5,
                         pady=7,
                         rowspan=1,
                         sticky="nsew")
        self._txtProgress.grid(in_=parent,
                               column=2,
                               row=3,
                               columnspan=1,
                               ipadx=0,
                               ipady=0,
                               padx=5,
                               pady=7,
                               rowspan=1,
                               sticky="nsew")
        self._txtShowName.grid(in_=parent,
                               column=2,
                               row=4,
                               columnspan=1,
                               ipadx=0,
                               ipady=0,
                               padx=5,
                               pady=7,
                               rowspan=1,
                               sticky="nsew")
        self._txtSeason.grid(in_=parent,
                             column=2,
                             row=5,
                             columnspan=1,
                             ipadx=0,
                             ipady=0,
                             padx=5,
                             pady=7,
                             rowspan=1,
                             sticky="nsew")
        self._txtEpisode.grid(in_=parent,
                              column=2,
                              row=6,
                              columnspan=1,
                              ipadx=0,
                              ipady=0,
                              padx=5,
                              pady=7,
                              rowspan=1,
                              sticky="nsew")
        self._txtTitle.grid(in_=parent,
                            column=2,
                            row=7,
                            columnspan=1,
                            ipadx=0,
                            ipady=0,
                            padx=5,
                            pady=7,
                            rowspan=1,
                            sticky="nsew")
        self._lbl_loggedin.grid(in_=parent,
                                column=1,
                                row=8,
                                columnspan=2,
                                ipadx=0,
                                ipady=0,
                                padx=5,
                                pady=5,
                                rowspan=1,
                                sticky="sw")

        # Resize Behavior
        parent.resizable(False, False)
        parent.grid_rowconfigure(1, weight=0, minsize=30, pad=20)
        parent.grid_rowconfigure(2, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(3, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(4, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(5, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(6, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(7, weight=0, minsize=30, pad=0)
        parent.grid_rowconfigure(8, weight=0, minsize=200, pad=0)
        parent.grid_columnconfigure(1, weight=0, minsize=70, pad=5)
        parent.grid_columnconfigure(2, weight=0, minsize=450, pad=0)
        parent.grid_columnconfigure(3, weight=0, minsize=450, pad=0)
        parent.grid_columnconfigure(4, weight=0, minsize=120, pad=0)