def _init_exampleListbox(self, parent): self._exampleFrame = listframe = Frame(parent) self._exampleFrame.pack(fill='both', side='left', padx=2) self._exampleList_label = Label(self._exampleFrame, font=self._boldfont, text='Examples') self._exampleList_label.pack() self._exampleList = Listbox(self._exampleFrame, selectmode='single', relief='groove', background='white', foreground='#909090', font=self._font, selectforeground='#004040', selectbackground='#c0f0c0') self._exampleList.pack(side='right', fill='both', expand=1) for example in self._examples: self._exampleList.insert('end', (' %s' % example)) self._exampleList.config(height=min(len(self._examples), 25), width=40) # Add a scrollbar if there are more than 25 examples. if len(self._examples) > 25: listscroll = Scrollbar(self._exampleFrame, orient='vertical') self._exampleList.config(yscrollcommand=listscroll.set) listscroll.config(command=self._exampleList.yview) listscroll.pack(side='left', fill='y') # If they select a example, apply it. self._exampleList.bind('<<ListboxSelect>>', self._exampleList_select)
def _init_exampleListbox(self, parent): self._exampleFrame = listframe = Frame(parent) self._exampleFrame.pack(fill="both", side="left", padx=2) self._exampleList_label = Label(self._exampleFrame, font=self._boldfont, text="Examples") self._exampleList_label.pack() self._exampleList = Listbox( self._exampleFrame, selectmode="single", relief="groove", background="white", foreground="#909090", font=self._font, selectforeground="#004040", selectbackground="#c0f0c0", ) self._exampleList.pack(side="right", fill="both", expand=1) for example in self._examples: self._exampleList.insert("end", (" %s" % example)) self._exampleList.config(height=min(len(self._examples), 25), width=40) # Add a scrollbar if there are more than 25 examples. if len(self._examples) > 25: listscroll = Scrollbar(self._exampleFrame, orient="vertical") self._exampleList.config(yscrollcommand=listscroll.set) listscroll.config(command=self._exampleList.yview) listscroll.pack(side="left", fill="y") # If they select a example, apply it. self._exampleList.bind("<<ListboxSelect>>", self._exampleList_select)
def _init_readingListbox(self, parent): self._readingFrame = listframe = Frame(parent) self._readingFrame.pack(fill='both', side='left', padx=2) self._readingList_label = Label(self._readingFrame, font=self._boldfont, text='Readings') self._readingList_label.pack() self._readingList = Listbox(self._readingFrame, selectmode='single', relief='groove', background='white', foreground='#909090', font=self._font, selectforeground='#004040', selectbackground='#c0f0c0') self._readingList.pack(side='right', fill='both', expand=1) # Add a scrollbar if there are more than 25 examples. listscroll = Scrollbar(self._readingFrame, orient='vertical') self._readingList.config(yscrollcommand=listscroll.set) listscroll.config(command=self._readingList.yview) listscroll.pack(side='right', fill='y') self._populate_readingListbox()
def _init_grammar(self, parent): # Grammar view. self._prodframe = listframe = Frame(parent) self._prodframe.pack(fill='both', side='left', padx=2) self._prodlist_label = Label( self._prodframe, font=self._boldfont, text='Available Expansions' ) self._prodlist_label.pack() self._prodlist = Listbox( self._prodframe, selectmode='single', relief='groove', background='white', foreground='#909090', font=self._font, selectforeground='#004040', selectbackground='#c0f0c0', ) self._prodlist.pack(side='right', fill='both', expand=1) self._productions = list(self._parser.grammar().productions()) for production in self._productions: self._prodlist.insert('end', (' %s' % production)) self._prodlist.config(height=min(len(self._productions), 25)) # Add a scrollbar if there are more than 25 productions. if len(self._productions) > 25: listscroll = Scrollbar(self._prodframe, orient='vertical') self._prodlist.config(yscrollcommand=listscroll.set) listscroll.config(command=self._prodlist.yview) listscroll.pack(side='left', fill='y') # If they select a production, apply it. self._prodlist.bind('<<ListboxSelect>>', self._prodlist_select)
def _init_readingListbox(self, parent): self._readingFrame = listframe = Frame(parent) self._readingFrame.pack(fill="both", side="left", padx=2) self._readingList_label = Label(self._readingFrame, font=self._boldfont, text="Readings") self._readingList_label.pack() self._readingList = Listbox( self._readingFrame, selectmode="single", relief="groove", background="white", foreground="#909090", font=self._font, selectforeground="#004040", selectbackground="#c0f0c0", ) self._readingList.pack(side="right", fill="both", expand=1) # Add a scrollbar if there are more than 25 examples. listscroll = Scrollbar(self._readingFrame, orient="vertical") self._readingList.config(yscrollcommand=listscroll.set) listscroll.config(command=self._readingList.yview) listscroll.pack(side="right", fill="y") self._populate_readingListbox()
def _init_grammar(self, parent): # Grammar view. self._prodframe = listframe = Frame(parent) self._prodframe.pack(fill="both", side="left", padx=2) self._prodlist_label = Label(self._prodframe, font=self._boldfont, text="Available Expansions") self._prodlist_label.pack() self._prodlist = Listbox( self._prodframe, selectmode="single", relief="groove", background="white", foreground="#909090", font=self._font, selectforeground="#004040", selectbackground="#c0f0c0", ) self._prodlist.pack(side="right", fill="both", expand=1) self._productions = list(self._parser.grammar().productions()) for production in self._productions: self._prodlist.insert("end", (" %s" % production)) self._prodlist.config(height=min(len(self._productions), 25)) # Add a scrollbar if there are more than 25 productions. if len(self._productions) > 25: listscroll = Scrollbar(self._prodframe, orient="vertical") self._prodlist.config(yscrollcommand=listscroll.set) listscroll.config(command=self._prodlist.yview) listscroll.pack(side="left", fill="y") # If they select a production, apply it. self._prodlist.bind("<<ListboxSelect>>", self._prodlist_select)
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)
def init_gui(self): """init helper""" window = PanedWindow(self.root, orient="vertical") window.pack(side=TOP, fill=BOTH, expand=True) top_pane = Frame(window) window.add(top_pane) mid_pane = Frame(window) window.add(mid_pane) bottom_pane = Frame(window) window.add(bottom_pane) #setting up frames top_frame = Frame(top_pane) mid_frame = Frame(top_pane) history_frame = Frame(top_pane) radio_frame = Frame(mid_pane) rating_frame = Frame(mid_pane) res_frame = Frame(mid_pane) check_frame = Frame(bottom_pane) msg_frame = Frame(bottom_pane) btn_frame = Frame(bottom_pane) top_frame.pack(side=TOP, fill=X) mid_frame.pack(side=TOP, fill=X) history_frame.pack(side=TOP, fill=BOTH, expand=True) radio_frame.pack(side=TOP, fill=X) rating_frame.pack(side=TOP, fill=X) res_frame.pack(side=TOP, fill=BOTH, expand=True) check_frame.pack(side=TOP, fill=X) msg_frame.pack(side=TOP, fill=BOTH, expand=True) btn_frame.pack(side=TOP, fill=X) # Binding F5 application-wide to run lint self.root.bind('<F5>', self.run_lint) #Message ListBox rightscrollbar = Scrollbar(msg_frame) rightscrollbar.pack(side=RIGHT, fill=Y) bottomscrollbar = Scrollbar(msg_frame, orient=HORIZONTAL) bottomscrollbar.pack(side=BOTTOM, fill=X) self.lb_messages = Listbox(msg_frame, yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white") self.lb_messages.bind("<Double-Button-1>", self.show_sourcefile) self.lb_messages.pack(expand=True, fill=BOTH) rightscrollbar.config(command=self.lb_messages.yview) bottomscrollbar.config(command=self.lb_messages.xview) #History ListBoxes rightscrollbar2 = Scrollbar(history_frame) rightscrollbar2.pack(side=RIGHT, fill=Y) bottomscrollbar2 = Scrollbar(history_frame, orient=HORIZONTAL) bottomscrollbar2.pack(side=BOTTOM, fill=X) self.showhistory = Listbox(history_frame, yscrollcommand=rightscrollbar2.set, xscrollcommand=bottomscrollbar2.set, bg="white") self.showhistory.pack(expand=True, fill=BOTH) rightscrollbar2.config(command=self.showhistory.yview) bottomscrollbar2.config(command=self.showhistory.xview) self.showhistory.bind('<Double-Button-1>', self.select_recent_file) self.set_history_window() #status bar self.status = Label(self.root, text="", bd=1, relief=SUNKEN, anchor=W) self.status.pack(side=BOTTOM, fill=X) #labelbl_ratingls lbl_rating_label = Label(rating_frame, text='Rating:') lbl_rating_label.pack(side=LEFT) lbl_rating = Label(rating_frame, textvariable=self.rating) lbl_rating.pack(side=LEFT) Label(mid_frame, text='Recently Used:').pack(side=LEFT) Label(top_frame, text='Module or package').pack(side=LEFT) #file textbox self.txt_module = Entry(top_frame, background='white') self.txt_module.bind('<Return>', self.run_lint) self.txt_module.pack(side=LEFT, expand=True, fill=X) #results box rightscrollbar = Scrollbar(res_frame) rightscrollbar.pack(side=RIGHT, fill=Y) bottomscrollbar = Scrollbar(res_frame, orient=HORIZONTAL) bottomscrollbar.pack(side=BOTTOM, fill=X) self.results = Listbox(res_frame, yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white", font="Courier") self.results.pack(expand=True, fill=BOTH, side=BOTTOM) rightscrollbar.config(command=self.results.yview) bottomscrollbar.config(command=self.results.xview) #buttons Button(top_frame, text='Open', command=self.file_open).pack(side=LEFT) Button(top_frame, text='Open Package', command=(lambda: self.file_open(package=True))).pack(side=LEFT) self.btnRun = Button(top_frame, text='Run', command=self.run_lint) self.btnRun.pack(side=LEFT) Button(btn_frame, text='Quit', command=self.quit).pack(side=BOTTOM) #radio buttons self.information_box = IntVar() self.convention_box = IntVar() self.refactor_box = IntVar() self.warning_box = IntVar() self.error_box = IntVar() self.fatal_box = IntVar() i = Checkbutton(check_frame, text="Information", fg=COLORS['(I)'], variable=self.information_box, command=self.refresh_msg_window) c = Checkbutton(check_frame, text="Convention", fg=COLORS['(C)'], variable=self.convention_box, command=self.refresh_msg_window) r = Checkbutton(check_frame, text="Refactor", fg=COLORS['(R)'], variable=self.refactor_box, command=self.refresh_msg_window) w = Checkbutton(check_frame, text="Warning", fg=COLORS['(W)'], variable=self.warning_box, command=self.refresh_msg_window) e = Checkbutton(check_frame, text="Error", fg=COLORS['(E)'], variable=self.error_box, command=self.refresh_msg_window) f = Checkbutton(check_frame, text="Fatal", fg=COLORS['(F)'], variable=self.fatal_box, command=self.refresh_msg_window) i.select() c.select() r.select() w.select() e.select() f.select() i.pack(side=LEFT) c.pack(side=LEFT) r.pack(side=LEFT) w.pack(side=LEFT) e.pack(side=LEFT) f.pack(side=LEFT) #check boxes self.box = StringVar() # XXX should be generated report = Radiobutton(radio_frame, text="Report", variable=self.box, value="Report", command=self.refresh_results_window) raw_met = Radiobutton(radio_frame, text="Raw metrics", variable=self.box, value="Raw metrics", command=self.refresh_results_window) dup = Radiobutton(radio_frame, text="Duplication", variable=self.box, value="Duplication", command=self.refresh_results_window) ext = Radiobutton(radio_frame, text="External dependencies", variable=self.box, value="External dependencies", command=self.refresh_results_window) stat = Radiobutton(radio_frame, text="Statistics by type", variable=self.box, value="Statistics by type", command=self.refresh_results_window) msg_cat = Radiobutton(radio_frame, text="Messages by category", variable=self.box, value="Messages by category", command=self.refresh_results_window) msg = Radiobutton(radio_frame, text="Messages", variable=self.box, value="Messages", command=self.refresh_results_window) source_file = Radiobutton(radio_frame, text="Source File", variable=self.box, value="Source File", command=self.refresh_results_window) report.select() report.grid(column=0, row=0, sticky=W) raw_met.grid(column=1, row=0, sticky=W) dup.grid(column=2, row=0, sticky=W) msg.grid(column=3, row=0, sticky=W) stat.grid(column=0, row=1, sticky=W) msg_cat.grid(column=1, row=1, sticky=W) ext.grid(column=2, row=1, sticky=W) source_file.grid(column=3, row=1, sticky=W) #dictionary for check boxes and associated error term self.msg_type_dict = { 'I': lambda: self.information_box.get() == 1, 'C': lambda: self.convention_box.get() == 1, 'R': lambda: self.refactor_box.get() == 1, 'E': lambda: self.error_box.get() == 1, 'W': lambda: self.warning_box.get() == 1, 'F': lambda: self.fatal_box.get() == 1 } self.txt_module.focus_set()
def _create_selector(self, parent, values): self._listbox = Listbox(parent) for item in values: self._listbox.insert(END, item) return self._listbox
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)
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)
def initialize(self): """ Initialize the tKinter app (GUI) by creating frames and graphical components, setting the window size etc. """ # self.bind("<Escape>", lambda x: self.destroy()) self.bind("<Escape>", on_close) listFrame0 = Frame(self) listFrame0.pack(side=TOP, fill=BOTH, expand=True) listFrame = Frame(listFrame0) listFrame.pack(side=LEFT, fill=BOTH, expand=True) scrollbary = Scrollbar(listFrame, orient=VERTICAL) scrollbary.pack(side=RIGHT, fill=Y) scrollbarx = Scrollbar(listFrame, orient=HORIZONTAL) scrollbarx.pack(side=BOTTOM, fill=X) # bd --> border self.listbox = Listbox(listFrame, bd=1, selectmode=SINGLE, yscrollcommand=scrollbary.set, xscrollcommand=scrollbarx.set) self.listbox.bind('<<ListboxSelect>>', self.on_select_click) scrollbary.config(command=self.listbox.yview) scrollbarx.config(command=self.listbox.xview) self.listbox.config(width=self.listbox.winfo_reqwidth() // 3) # width=self.listbox.winfo_reqwidth() self.listbox.pack(side=LEFT, fill=BOTH, expand=True) listFrame1 = Frame(listFrame0) listFrame1.pack(side=LEFT, fill=BOTH, expand=True) scrollbary1 = Scrollbar(listFrame1, orient=VERTICAL) scrollbary1.pack(side=RIGHT, fill=Y) scrollbarx1 = Scrollbar(listFrame1, orient=HORIZONTAL) scrollbarx1.pack(side=BOTTOM, fill=X) # bd --> border self.listbox1 = Listbox(listFrame1, bd=0, selectmode=SINGLE, yscrollcommand=scrollbary1.set, xscrollcommand=scrollbarx1.set) self.listbox1.bind('<<ListboxSelect>>', self.on_update_select_click) scrollbary1.config(command=self.listbox1.yview) scrollbarx1.config(command=self.listbox1.xview) self.listbox1.config(width=self.listbox1.winfo_reqwidth() // 2) # width=self.listbox.winfo_reqwidth() self.listbox1.pack(side=LEFT, fill=BOTH, expand=True) text_frame = Frame(self) text_frame.pack(fill=X) # ,expand=True) self.created_str = tk.StringVar() created = tk.Entry(text_frame, textvariable=self.created_str) self.created_months = ttk.Combobox(text_frame) self.created_months['values'] = ('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12') self.created_months.set(datetime.date.today().strftime('%m')) self.created_months.state(['readonly']) # self.created_months.bind('<<ComboboxSelected>>', self.On_table_select) self.value_str = tk.StringVar() value = tk.Entry(text_frame, textvariable=self.value_str) self.category_str = tk.StringVar() category = tk.Entry(text_frame, textvariable=self.category_str) # , state='readonly') self.description_str = tk.StringVar() description = tk.Entry(text_frame, textvariable=self.description_str) fill_from_csv_button = Button(text_frame, text="fill from csv") fill_from_csv_button.bind('<Button-1>', self.on_fill_from_csv_click) self.db_tables = ttk.Combobox(text_frame) self.db_tables.state(['readonly']) self.db_tables.bind('<<ComboboxSelected>>', self.on_table_select) created.pack(side=LEFT) self.created_months.pack(side=LEFT) value.pack(side=LEFT) category.pack(side=LEFT) description.pack(side=LEFT) # check.pack(side=LEFT) fill_from_csv_button.pack(side=LEFT) self.db_tables.pack(side=LEFT) button_frame = Frame(self) button_frame.pack(fill=X) # ,expand=True) save_button = Button(button_frame, text="save entry") save_button.bind('<Button-1>', self.on_save_entry_click) database_button = Button(button_frame, text="select database") database_button.bind('<Button-1>', self.on_database_click) self.database_path_str = tk.StringVar() self.database_path = tk.Label(button_frame, textvariable=self.database_path_str, bg="white", anchor=tk.W) save_button.pack(side=LEFT) database_button.pack(side=RIGHT) self.database_path.pack(side=RIGHT) # , expand=True, fill=BOTH fill=BOTH, debugFrame = Frame(self) debugFrame.pack(side=BOTTOM, fill=X) # ,expand=True) self.last_entry = tk.StringVar() self.path_label = tk.Label(debugFrame, textvariable=self.last_entry, bg="white", anchor=tk.W) self.path_label.pack(side=LEFT, fill=BOTH, expand=True) # print self.geometry() self.update() # self.geometry(self.geometry()) # self.update() # print self.geometry() # fix the size of the window by setting the window size to its own size w = self.winfo_screenwidth() # print w # print 'reqwidth',self.winfo_reqwidth() # h = self.winfo_screenheight() self.geometry('{0}x{1}+{2}+{3}'.format(self.winfo_reqwidth(), self.winfo_reqheight() * 3, w - self.winfo_reqwidth() - 20, 0)) # self.geometry() self.update() self.minsize(self.winfo_reqwidth(), self.winfo_reqheight())