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
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)
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)
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 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)
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()
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)
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)