def __init__(self, client, *a, **kw): Frame.__init__(self, *a, **kw) self._client = client self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1) self._addresses_w = a_w = Frame(self, width=100) a_w.grid(row=0, column=0, sticky="NESW") a_w.rowconfigure(0, weight=1) a_w.columnconfigure(0, weight=1) self._addresses_tv = a_tv = Treeview(a_w, columns=("address", )) a_tv.heading("#0", text="#") a_tv.heading("address", text="Sender") a_tv.column("#0", minwidth=50, width=50) a_tv.column("address", minwidth=100, width=100) a_tv.grid(row=0, column=0, sticky="NESW") add_scrollbars(a_w, a_tv) a_tv.bind("<<TreeviewSelect>>", self._on_address_tv_select) self.columnconfigure(1, weight=10) # ConversationView(DoubleScrollbarFrame) uses `pack` layout manager. # This frame handles this. self._conversation_w_holder = conv_w = Frame(self) conv_w.grid(row=0, column=1, sticky="NESW") self._invalidate() client.watch_sms_added(self._on_sms_added)
def _init_corpus_select(self, parent): innerframe = Frame(parent, background=self._BACKGROUND_COLOUR) self.var = StringVar(innerframe) self.var.set(self.model.DEFAULT_CORPUS) Label( innerframe, justify=LEFT, text=' Corpus: ', background=self._BACKGROUND_COLOUR, padx=2, pady=1, border=0, ).pack(side='left') other_corpora = list(self.model.CORPORA.keys()).remove( self.model.DEFAULT_CORPUS) om = OptionMenu(innerframe, self.var, self.model.DEFAULT_CORPUS, command=self.corpus_selected, *self.model.non_default_corpora()) om['borderwidth'] = 0 om['highlightthickness'] = 1 om.pack(side='left') innerframe.pack(side='top', fill='x', anchor='n')
def _create_buttons(self): frame = Frame(self) self._create_button(frame, self._left_button, self._left_button_clicked) self._create_button(frame, self._right_button, self._right_button_clicked) frame.pack()
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 __init__(self, parent, title=None, content=""): Toplevel.__init__(self, parent) self.transient(parent) self.log = logging.getLogger(__name__) if title: self.title(title) self.parent = parent self.body = Frame(self) self.fill_body(content) self.body.pack(padx=5, pady=5) self.create_buttonbox() self.grab_set() self.protocol("WM_DELETE_WINDOW", self.ok) self.geometry("+%d+%d" % (parent.winfo_rootx() + 50, parent.winfo_rooty() + 50)) self.focus_set() self.wait_window(self)
def _init_paging(self, parent): innerframe = Frame(parent, background=self._BACKGROUND_COLOUR) self.prev = prev = Button(innerframe, text='Previous', command=self.previous, width='10', borderwidth=1, highlightthickness=1, state='disabled') prev.pack(side='left', anchor='center') self.next = next = Button(innerframe, text='Next', command=self.__next__, width='10', borderwidth=1, highlightthickness=1, state='disabled') next.pack(side='right', anchor='center') innerframe.pack(side='top', fill='y') self.current_page = 0
def _create_body(self, message, value, **extra): frame = Frame(self) Label(frame, text=message, anchor=W, justify=LEFT, wraplength=800).pack(fill=BOTH) selector = self._create_selector(frame, value, **extra) if selector: selector.pack(fill=BOTH) selector.focus_set() frame.pack(padx=5, pady=5, expand=1, fill=BOTH)
def __init__(self, *args, **kwargs): Frame.__init__(self, *args, **kwargs) self.__label = Label(self) self.__label.pack(side=LEFT) self.__entry = Entry(self) self.__entry.pack(fill=X, expand=YES) self.__checker_function = None self.__image = None
def _init_widgets(self, parent): self.main_frame = Frame(parent, dict(background=self._BACKGROUND_COLOUR, padx=1, pady=1, border=1)) self._init_corpus_select(self.main_frame) self._init_query_box(self.main_frame) self._init_results_box(self.main_frame) self._init_paging(self.main_frame) self._init_status(self.main_frame) self.main_frame.pack(fill='both', expand=True)
def __init__(self, conv, *a, **kw): Frame.__init__(self, *a, **kw) self._conv = conv self._s_conv = s_conv = sorted(conv, key = lambda i : i["date"]) self.columnconfigure(0, weight = 1) self.rowconfigure(0, weight = 1) self._text = text = Text(self, wrap = WORD) text.grid(row = 0, column = 0, sticky = "NESW") add_scrollbars(self, text) # incoming text.tag_config("itime", foreground = "grey", background = "#eeeeee", selectbackground = "SystemHighlight", selectforeground = "SystemHighlightText" ) text.tag_config("imessage", rmargin = 100 ) text.tag_config("otime", justify = RIGHT, foreground = "grey", background = "#eeeeee", selectbackground = "SystemHighlight", selectforeground = "SystemHighlightText" ) text.tag_config("omessage", lmargin1 = 100, lmargin2 = 100, background = "#f8f8f8", selectbackground = "SystemHighlight", ) # separator text.tag_config("sep", font = ("Arial", 1), background = "#dddddd", selectbackground = "SystemHighlight", ) for item in s_conv: prefix = "i" if item.incoming else "o" text.insert(END, item.datetime.strftime("%Y.%m.%d %H:%M:%S") + "\n", prefix + "time" ) text.insert(END, item.message + "\n", prefix + "message") text.insert(END, "\n", "sep") text.config(state = DISABLED) text.see("end-1c")
def _make_buttons(self): '''Create action buttons at the bottom.''' button_row = self.my_grid.size + self.Y_PADDING + (self.BUTTON_PANEL_HEIGHT - 2 * self.BUTTON_PADDING) button_frame = Frame(self) button_frame.place(x=self.my_grid.size - self.X_PADDING, y=button_row) self.play_game_button = Button(button_frame, text="Play") self.play_game_button.pack(side=LEFT, padx=self.BUTTON_PADDING, pady=self.BUTTON_PADDING)
def __init__(self, *args, **kwargs): Frame.__init__(self, *args, **kwargs) Observable.__init__(self) self._text = text = Text(self, wrap=NONE, height=1.2, relief=SOLID) text.bind('<Configure>', self._on_resize) text.bind('<KeyPress>', self._on_key_press) text.pack(fill=X, expand=YES, side=LEFT) self._default_cursor = text['cursor'] self._default_background_color = text['background'] # History self._history = [] text.tag_config('back_button', foreground='grey') text.tag_bind('back_button', '<Button-1>', self._on_back_click) text.tag_bind('back_button', '<Button-3>', self._on_back_right_click) text.tag_bind('back_button', '<Enter>', lambda *args: self._change_cursor_to_hand(True)) text.tag_bind('back_button', '<Leave>', lambda *args: self._change_cursor_to_hand(False)) text.insert('1.0', u'\u2190 ', 'back_button') # End History # Browse Button text.tag_config('browse_button', foreground='orange') text.tag_bind('browse_button', '<Button-1>', self._on_button_click) text.tag_bind('browse_button', '<Enter>', lambda *args: self._change_cursor_to_hand(True)) text.tag_bind('browse_button', '<Leave>', lambda *args: self._change_cursor_to_hand(False)) # End Browse Button # WinOpen Button sys_name = platform.system().lower() try: __mod = __import__(eval_format('wavesynlib.interfaces.os.{sys_name}.shell.winopen'), globals(), locals(), ['winopen'], -1) winopen_func = getattr(__mod, 'winopen') def on_winopen_click(*args): winopen_func(self._directory) except (ImportError, AttributeError): def on_winopen_click(*args): pass text.tag_config('winopen_button', foreground='orange') text.tag_bind('winopen_button', '<Button-1>', on_winopen_click) text.tag_bind('winopen_button', '<Enter>', lambda *args: self._change_cursor_to_hand(True)) text.tag_bind('winopen_button', '<Leave>', lambda *args: self._change_cursor_to_hand(False)) # End WinOpen Button self._blank_len = 2 self._browse_text = u'\u25a1' self._winopen_text = u'\u25a0' self._coding = sys.getfilesystemencoding() self._directory = None
def __init__(self, master): '''Create the UI for a game of battleship.''' Frame.__init__(self, master) self._create_ui() # these are 'controller' elements that should really be in another class self.ai = ShipAI(self.their_grid._model, self.my_grid._model) self.reset()
def __init__(self, *args, **kwargs): Frame.__init__(self, *args, **kwargs) self.pack(expand=YES, fill=BOTH) self._make_widgets() self.__on_item_double_click = FunctionChain() def dbclick_callback(event): item_id = self.tree.identify('item', event.x, event.y) item_properties = self.tree.item(item_id) self.__on_item_double_click(item_id, item_properties) self.tree.bind('<Double-1>', dbclick_callback)
def _make_buttons(self): '''Create action buttons at the bottom.''' button_row = self.my_grid.size + self.Y_PADDING + ( self.BUTTON_PANEL_HEIGHT - 2 * self.BUTTON_PADDING) button_frame = Frame(self) button_frame.place(x=self.my_grid.size - self.X_PADDING, y=button_row) self.play_game_button = Button(button_frame, text="Play") self.play_game_button.pack(side=LEFT, padx=self.BUTTON_PADDING, pady=self.BUTTON_PADDING)
def _init_corpus_select(self, parent): innerframe = Frame(parent, background=self._BACKGROUND_COLOUR) self.var = StringVar(innerframe) self.var.set(self.model.DEFAULT_CORPUS) Label(innerframe, justify=LEFT, text=' Corpus: ', background=self._BACKGROUND_COLOUR, padx = 2, pady = 1, border = 0).pack(side='left') other_corpora = list(self.model.CORPORA.keys()).remove(self.model.DEFAULT_CORPUS) om = OptionMenu(innerframe, self.var, self.model.DEFAULT_CORPUS, command=self.corpus_selected, *self.model.non_default_corpora()) om['borderwidth'] = 0 om['highlightthickness'] = 1 om.pack(side='left') innerframe.pack(side='top', fill='x', anchor='n')
def __init__(self, *args, **kwargs): self.__i_range = i_range = kwargs.pop('i_range') self.__q_range = q_range = kwargs.pop('q_range') Frame.__init__(self, *args, **kwargs) Observable.__init__(self) self.__canvas = canvas = ComplexCanvas(self) canvas.grid(row=0, column=0, sticky='wens') canvas['bg'] = 'black' self.__q_slider = q_slider = Scale(self, from_=q_range, to=-q_range, orient='vertical') q_slider.grid(row=0, column=1, sticky='e') self.__i_slider = i_slider = Scale(self, from_=-i_range, to=i_range, orient='horizontal') i_slider.grid(row=1, column=0, sticky='s') self.grid_rowconfigure(0, weight=1) self.grid_columnconfigure(0, weight=1) self.__pad = 10 self.__width = 0 self.__height = 0 self.__center = None self.__radius = 0 self.__bbox = None self.__complex_magnitude = 0 + 0j canvas.bind('<Configure>', self._on_resize) self.__borderBox = canvas.create_rectangle(0, 0, 10, 10, outline='green') self.__borderCircle = canvas.create_oval(0, 0, 10, 10, outline='green', dash=[1, 2]) self.__middleCircle = canvas.create_oval(0, 0, 10, 10, outline='green', dash=[1, 2]) self.__vLine = canvas.create_line(0, 0, 10, 10, fill='green', dash=[1, 2]) self.__hLine = canvas.create_line(0, 0, 10, 10, fill='green', dash=[1, 2]) self.__dLine = canvas.create_line(0, 0, 10, 10, fill='green', dash=[1, 2]) self.__cdLine = canvas.create_line(0, 0, 10, 10, fill='green', dash=[1, 2]) self.__scale_circles = [] for k in range(60): if k % 5 == 0: color = 'gold' else: color = 'green' self.__scale_circles.append(canvas.create_oval(0, 0, 10, 10, fill=color)) self.__indicator1 = self.Indicator(self, solid=False) self.__indicator2 = self.Indicator(self) canvas.bind('<Motion>', self._on_mouse_move) canvas.bind('<Button-1>', self._on_click) i_slider['command'] = self._on_iq_scale q_slider['command'] = self._on_iq_scale
def pack(self, **kwargs): ''' Pack the scrollbar and canvas correctly in order to recreate the same look as MFC's windows. ''' self.hscrollbar.pack(side=BOTTOM, fill=X, expand=FALSE) self.vscrollbar.pack(side=RIGHT, fill=Y, expand=FALSE) self.sizegrip.pack(in_=self.hscrollbar, side=BOTTOM, anchor="se") self.canvas.pack(side=LEFT, padx=5, pady=5, fill=BOTH, expand=TRUE) Frame.pack(self, **kwargs)
def create_buttonbox(self): # add standard button box. override if you don't want the # standard buttons box = Frame(self) w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE) w.pack(side=LEFT, padx=5, pady=5) self.bind("&<Return>", self.ok) self.bind("&<Escape>", self.ok) box.pack()
def __init__(self, *args, **kwargs): Frame.__init__(self, *args, **kwargs) sbar = Scrollbar(self) list = Listbox(self) sbar.config(command=list.yview) list.config(yscrollcommand=sbar.set) sbar.pack(side=RIGHT, fill=Y) list.pack(side=LEFT, expand=YES, fill=BOTH) list.bind('<<ListboxSelect>>', self._on_listbox_click) self.__list_click_callback = None self.__list = list self.__sbar = sbar
def _init_feedback(self, parent): self._feedbackframe = feedbackframe = Frame(parent) feedbackframe.pack(fill='x', side='bottom', padx=3, pady=3) self._lastoper_label = Label(feedbackframe, text='Last Operation:', font=self._font) self._lastoper_label.pack(side='left') lastoperframe = Frame(feedbackframe, relief='sunken', border=1) lastoperframe.pack(fill='x', side='right', expand=1, padx=5) self._lastoper1 = Label(lastoperframe, foreground='#007070', background='#f0f0f0', font=self._font) self._lastoper2 = Label(lastoperframe, anchor='w', width=30, foreground='#004040', background='#f0f0f0', font=self._font) self._lastoper1.pack(side='left') self._lastoper2.pack(side='left', fill='x', expand=1)
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__(self, image, initialField, initialText): frm = Frame(root) frm.config(background="white") self.image = PhotoImage(format='gif',data=images[image.upper()]) self.imageDimmed = PhotoImage(format='gif',data=images[image]) self.img = Label(frm) self.img.config(borderwidth=0) self.img.pack(side = "left") self.fld = Text(frm, **fieldParams) self.initScrollText(frm,self.fld,initialField) frm = Frame(root) self.txt = Text(frm, **textParams) self.initScrollText(frm,self.txt,initialText) for i in range(2): self.txt.tag_config(colors[i], background = colors[i]) self.txt.tag_config("emph"+colors[i], foreground = emphColors[i])
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_widgets(self, parent): self.main_frame = Frame(parent, dict(background=self._BACKGROUND_COLOUR, padx=1, pady=1, border=1)) self._init_corpus_select(self.main_frame) self._init_results_box(self.main_frame) self._init_paging(self.main_frame) self._init_status(self.main_frame) self.main_frame.pack(fill='both', expand=True)
def _init_buttons(self): frame = self._buttonframe = Frame(self._top) Button(frame, text='Ok', command=self._ok, underline=0, takefocus=0).pack(side='left') Button(frame, text='Apply', command=self._apply, underline=0, takefocus=0).pack(side='left') Button( frame, text='Reset', command=self._reset, underline=0, takefocus=0, ).pack(side='left') Button(frame, text='Cancel', command=self._cancel, underline=0, takefocus=0).pack(side='left') Button(frame, text='Help', command=self._help, underline=0, takefocus=0).pack(side='right')
def _init_startframe(self): frame = self._startframe = Frame(self._top) self._start = Entry(frame) self._start.pack(side="right") Label(frame, text="Start Symbol:").pack(side="right") Label(frame, text="Productions:").pack(side="left") self._start.insert(0, self._cfg.start().symbol())
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_buttons(self, parent): # Set up the frames. self._buttonframe = buttonframe = Frame(parent) buttonframe.pack(fill="none", side="bottom") Button( buttonframe, text="Step", background="#90c0d0", foreground="black", command=self.step, ).pack(side="left") Button( buttonframe, text="Shift", underline=0, background="#90f090", foreground="black", command=self.shift, ).pack(side="left") Button( buttonframe, text="Reduce", underline=0, background="#90f090", foreground="black", command=self.reduce, ).pack(side="left") Button( buttonframe, text="Undo", underline=0, background="#f0a0a0", foreground="black", command=self.undo, ).pack(side="left")
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_startframe(self): frame = self._startframe = Frame(self._top) self._start = Entry(frame) self._start.pack(side='right') Label(frame, text='Start Symbol:').pack(side='right') Label(frame, text='Productions:').pack(side='left') self._start.insert(0, self._cfg.start().symbol())
def _init_buttons(self, parent): # Set up the frames. self._buttonframe = buttonframe = Frame(parent) buttonframe.pack(fill='none', side='bottom') Button( buttonframe, text='Step', background='#90c0d0', foreground='black', command=self.step, ).pack(side='left') Button( buttonframe, text='Shift', underline=0, background='#90f090', foreground='black', command=self.shift, ).pack(side='left') Button( buttonframe, text='Reduce', underline=0, background='#90f090', foreground='black', command=self.reduce, ).pack(side='left') Button( buttonframe, text='Undo', underline=0, background='#f0a0a0', foreground='black', command=self.undo, ).pack(side='left')
def __init__(self, server, *a, **kw): Frame.__init__(self, *a, **kw) self._srv = server self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1) self._nb = nb = Notebook(self) nb.grid(row=0, column=0, sticky="NESW") self._clients2tabs = {} self._update_tabs() server.watch_new_client(self._on_new_client)
def __init__(self, *args, **kwargs): from_ = kwargs.pop('from_') to = kwargs.pop('to') name = kwargs.pop('name') formatter = kwargs.pop('formatter', str) self.__formatter = formatter Frame.__init__(self, *args, **kwargs) if name is not None: Label(self, text=name).pack(side=LEFT) self.__scale = Scale(self, from_=from_, to=to, command=self._on_change) self.__scale.pack(side=LEFT, fill=X, expand=YES) self.__value_label = value_label = Label(self) value_label.pack(side=LEFT)
def __init__(self, *args, **kwargs): Frame.__init__(self, *args, **kwargs) canvas = Canvas(self) xbar = Scrollbar(self, orient=HORIZONTAL) xbar.config(command=canvas.xview) canvas.config(xscrollcommand=xbar.set) xbar.pack(side=BOTTOM, fill=X) ybar = Scrollbar(self) ybar.config(command=canvas.yview) canvas.config(yscrollcommand=ybar.set) ybar.pack(side=RIGHT, fill=Y) canvas.pack(expand=YES, fill=BOTH) self.__canvas = canvas
def _init_prodframe(self): self._prodframe = Frame(self._top) # Create the basic Text widget & scrollbar. self._textwidget = Text(self._prodframe, background='#e0e0e0', exportselection=1) self._textscroll = Scrollbar(self._prodframe, takefocus=0, orient='vertical') self._textwidget.config(yscrollcommand = self._textscroll.set) self._textscroll.config(command=self._textwidget.yview) self._textscroll.pack(side='right', fill='y') self._textwidget.pack(expand=1, fill='both', side='left') # Initialize the colorization tags. Each nonterminal gets its # own tag, so they aren't listed here. self._textwidget.tag_config('terminal', foreground='#006000') self._textwidget.tag_config('arrow', font='symbol') self._textwidget.tag_config('error', background='red') # Keep track of what line they're on. We use that to remember # to re-analyze a line whenever they leave it. self._linenum = 0 # Expand "->" to an arrow. self._top.bind('>', self._replace_arrows) # Re-colorize lines when appropriate. self._top.bind('<<Paste>>', self._analyze) self._top.bind('<KeyPress>', self._check_analyze) self._top.bind('<ButtonPress>', self._check_analyze) # Tab cycles focus. (why doesn't this work??) def cycle(e, textwidget=self._textwidget): textwidget.tk_focusNext().focus() self._textwidget.bind('<Tab>', cycle) prod_tuples = [(p.lhs(),[p.rhs()]) for p in self._cfg.productions()] for i in range(len(prod_tuples)-1,0,-1): if (prod_tuples[i][0] == prod_tuples[i-1][0]): if () in prod_tuples[i][1]: continue if () in prod_tuples[i-1][1]: continue print(prod_tuples[i-1][1]) print(prod_tuples[i][1]) prod_tuples[i-1][1].extend(prod_tuples[i][1]) del prod_tuples[i] for lhs, rhss in prod_tuples: print(lhs, rhss) s = '%s ->' % lhs for rhs in rhss: for elt in rhs: if isinstance(elt, Nonterminal): s += ' %s' % elt else: s += ' %r' % elt s += ' |' s = s[:-2] + '\n' self._textwidget.insert('end', s) self._analyze()
def _init_query_box(self, parent): innerframe = Frame(parent, background=self._BACKGROUND_COLOUR) another = Frame(innerframe, background=self._BACKGROUND_COLOUR) self.query_box = Entry(another, width=60) self.query_box.pack(side='left', fill='x', pady=25, anchor='center') self.search_button = Button(another, text='Search', command=self.search, borderwidth=1, highlightthickness=1) self.search_button.pack(side='left', fill='x', pady=25, anchor='center') self.query_box.bind('<KeyPress-Return>', self.search_enter_keypress_handler) another.pack() innerframe.pack(side='top', fill='x', anchor='n')
def initScrollText(self, frm, txt, contents): scl = Scrollbar(frm) scl.config(command=txt.yview) scl.pack(side="right", fill="y") txt.pack(side="left", expand=True, fill="x") txt.config(yscrollcommand=scl.set) txt.insert("1.0", contents) frm.pack(fill="x") Frame(height=2, bd=1, relief="ridge").pack(fill="x")
def configure(self, cnf={}, **kw): """ Configure this widget. Use ``label_*`` to configure all labels; and ``listbox_*`` to configure all listboxes. E.g.: >>> mlb = MultiListbox(master, 5) >>> mlb.configure(label_foreground='red') >>> mlb.configure(listbox_foreground='red') """ cnf = dict(list(cnf.items()) + list(kw.items())) for (key, val) in list(cnf.items()): if key.startswith('label_') or key.startswith('label-'): for label in self._labels: label.configure({key[6:]: val}) elif key.startswith('listbox_') or key.startswith('listbox-'): for listbox in self._listboxes: listbox.configure({key[8:]: val}) else: Frame.configure(self, {key: val})
def configure(self, cnf={}, **kw): """ Configure this widget. Use ``label_*`` to configure all labels; and ``listbox_*`` to configure all listboxes. E.g.: >>> mlb = MultiListbox(master, 5) >>> mlb.configure(label_foreground='red') >>> mlb.configure(listbox_foreground='red') """ cnf = dict(list(cnf.items()) + list(kw.items())) for (key, val) in list(cnf.items()): if key.startswith('label_') or key.startswith('label-'): for label in self._labels: label.configure({key[6:]: val}) elif key.startswith('listbox_') or key.startswith('listbox-'): for listbox in self._listboxes: listbox.configure({key[8:]: val}) else: Frame.configure(self, {key:val})
def __init__(self, *args, **kwargs): pil_image = kwargs.pop('pil_image') photo = ImageTk.PhotoImage(pil_image) self.__photo = photo self.__origin_image = pil_image self.__zoomed_image = pil_image Frame.__init__(self, *args, **kwargs) frame = Frame(self) frame.pack(fill='x') save_dlg = lambda: asksaveasfilename(filetypes=[('JPEG', '.jpg'), ('PNG', '.png')], defaultextension='.jpg') def on_save(image): filename = save_dlg() if filename: image.save(filename) Label(frame, text=eval_format('id={id(self)}')).pack(side='left') Button(frame, text='Save Origin', command=lambda:on_save(self.__origin_image)).pack(side='left') Button(frame, text='Save Zoomed', command=lambda:on_save(self.__zoomed_image)).pack(side='left') scale = Scale(frame, from_=0, to=100, orient='horizontal', value=100) scale.pack(side='left') zoomed_label = Label(frame, text='100%') zoomed_label.pack(side='left') self.__label = label = Label(self, image=photo) label.pack(expand=YES, fill=BOTH) def on_scale(val): val = float(val) width, height = self.__origin_image.size width = int(width * val / 100) height = int(height * val / 100) zoomed_image = self.__origin_image.resize((width, height), Image.ANTIALIAS) self.__zoomed_image = zoomed_image self.__photo = ImageTk.PhotoImage(zoomed_image) self.__label['image'] = self.__photo zoomed_label['text'] = '{}%'.format(int(val)) scale['command'] = on_scale
def __init__(self, master=None, **kw): Frame.__init__(self, master, **kw) # Font selector selector_frame = LabelFrame(self, text='Font Selector') selector_frame.pack(side=LEFT) # Font face face_frame = LabelFrame(selector_frame, text='Font Face') face_frame.pack() face_list = ScrolledList(face_frame) face_list.pack() fonts = list(tkFont.families(self)) fonts.sort() for font in fonts: face_list.insert(END, font) face_list.list_click_callback = self._on_face_select self.face_list = face_list # Font size size_frame = LabelFrame(selector_frame, text='Font Size') size_frame.pack() size_combo = Combobox(size_frame, takefocus=1, stat='readonly') size_combo.pack() size_combo['value'] = range(7, 23) size_combo.current(0) size_combo.bind('<<ComboboxSelected>>', self._on_size_select) self.size_combo = size_combo # Font Sample default_font = ('Courier', 10, tkFont.NORMAL) sample_frame = LabelFrame(self, text='Samples') sample_frame.pack(side=RIGHT, expand=YES, fill=Y) sample_label = Label(sample_frame, text='\tabcdefghij\t\n\tABCDEFGHIJ\t\n\t0123456789\t', font=default_font) sample_label.pack(expand=YES) self.sample_label = sample_label self.face = default_font[0] self.size = default_font[1] size_combo.current(self.size - 7)
def set_matplotlib_style(self, style_name=''): import matplotlib.pyplot as plt if style_name is self.constants.ASK_DIALOG: dialog = True else: dialog = False ret = [None] if dialog: win = Toplevel() Label(win, text='Select a style for newly-created figures.').pack() combo = Combobox(win, stat='readonly') combo['values'] = plt.style.available combo.current(0) combo.pack() ret = [None] def on_ok(): ret[0] = combo.get() win.quit() def on_cancel(): win.quit() frame = Frame(win) frame.pack() Button(win, text='Cancel', command=on_cancel).pack(side='right') Button(win, text='Ok', command=on_ok).pack(side='right') win.protocol('WM_DELETE_WINDOW', win.quit) win.focus_set() win.grab_set() win.mainloop() win.destroy() style = ret[0] if ret[0] is not None else style_name plt.style.use(style)
def __init__(self, package_name, base_class, display_base_class=False): self.__package_name = package_name self.__base_class = base_class self.__display_base_class = display_base_class self.__window = window = Toplevel() window.title('Class Selector') self.__selected_class_name = '' self.__selected_module_name = '' self.__tree = tree = ScrolledTree(window) tree.pack() # If a module print something while being loaded, the stdout of this # script will be contaminated. # The dumb_stream prevents the contamination. with dumb_stream(): classes = self.load_modules() for package in classes: packageNode = tree.insert('', 'end', text=package) for class_name in classes[package]: tree.insert(packageNode, 'end', text=class_name, values=package) button_frame = Frame(window) button_frame.pack() def _on_click(module_name, class_name): self.__selected_module_name = module_name self.__selected_class_name = class_name window.destroy() cancel_button = Button(button_frame, text='Cancel', command=lambda: _on_click('', '')) cancel_button.pack(side='right') ok_button = Button( button_frame, text='OK', command=lambda: _on_click( tree.item(tree.selection(), 'values')[0], tree.item(tree.selection(), 'text') ) ) ok_button.pack(side='right')
def __init__(self, grammar, text): self._grammar = grammar self._text = text # Set up the main window. self._top = Tk() self._top.title('Context Free Grammar Demo') # Base font size self._size = IntVar(self._top) self._size.set(12) # = medium # Set up the key bindings self._init_bindings(self._top) # Create the basic frames frame1 = Frame(self._top) frame1.pack(side='left', fill='y', expand=0) self._init_menubar(self._top) self._init_buttons(self._top) self._init_grammar(frame1) self._init_treelet(frame1) self._init_workspace(self._top)
def ask_font(): win = Toplevel() win.title('Font Dialog') buttonFrame = Frame(win) retval = [None] def onClick(ret=None): win.destroy() retval[0] = ret buttonFrame.pack(side=BOTTOM) btnCancel = Button(buttonFrame, text='Cancel', command=lambda: onClick()) btnCancel.pack(side=RIGHT) btnOk = Button(buttonFrame, text='OK', command=lambda: onClick((fontFrame.face, fontFrame.size))) btnOk.pack(side=RIGHT) fontFrame = FontFrame(win) fontFrame.pack() win.focus_set() win.grab_set() win.wait_window() return retval[0]
def __init__(self, *args, **kwargs): Frame.__init__(self, *args, **kwargs) Observable.__init__(self) self._text = text = Text(self, wrap=NONE, height=1.2, relief=SOLID) text.bind('<Configure>', self._on_resize) text.bind('<KeyPress>', self._on_key_press) text.pack(fill=X, expand=YES, side=LEFT) self._default_cursor = text['cursor'] self._default_background_color = text['background'] # Browse Button text.tag_config('browse_button', foreground='orange') text.tag_bind('browse_button', '<Button-1>', self._on_button_click) text.tag_bind('browse_button', '<Enter>', lambda *args: self._change_cursor_to_hand(True)) text.tag_bind('browse_button', '<Leave>', lambda *args: self._change_cursor_to_hand(False)) # End Browse Button self._blank_len = 2 self._browse_text = 'BROWSE' self._coding = sys.getfilesystemencoding() self._directory = None
def _init_results_box(self, parent): innerframe = Frame(parent) i1 = Frame(innerframe) i2 = Frame(innerframe) vscrollbar = Scrollbar(i1, borderwidth=1) hscrollbar = Scrollbar(i2, borderwidth=1, orient='horiz') self.results_box = Text(i1, font=Font(family='courier', size='16'), state='disabled', borderwidth=1, yscrollcommand=vscrollbar.set, xscrollcommand=hscrollbar.set, wrap='none', width='40', height = '20', exportselection=1) self.results_box.pack(side='left', fill='both', expand=True) vscrollbar.pack(side='left', fill='y', anchor='e') vscrollbar.config(command=self.results_box.yview) hscrollbar.pack(side='left', fill='x', expand=True, anchor='w') hscrollbar.config(command=self.results_box.xview) #there is no other way of avoiding the overlap of scrollbars while using pack layout manager!!! Label(i2, text=' ', background=self._BACKGROUND_COLOUR).pack(side='left', anchor='e') i1.pack(side='top', fill='both', expand=True, anchor='n') i2.pack(side='bottom', fill='x', anchor='s') innerframe.pack(side='top', fill='both', expand=True)
def __init__(self): # The instance of this class is the root of the model tree. Thus is_root is set to True super(Application, self).__init__(node_name=Scripting.root_name, is_root=True) Scripting.name_space['locals'][Scripting.root_name] = self Scripting.name_space['globals'] = globals() Scripting.root_node = self self.homepage = 'https://github.com/xialulee/WaveSyn' file_path = getsourcefile(type(self)) dir_path = os.path.split(file_path)[0] # load config file config_file_path = os.path.join(dir_path, 'config.json') with open(config_file_path) as f: config = json.load(f) console_menu = config['ConsoleMenu'] self.editor_info = config['EditorInfo'] self.lock_attribute('editor_info') self.prompt_symbols = config['PromptSymbols'] tag_defs = config['TagDefs'] # End load config file root = Tix.Tk() root.protocol("WM_DELETE_WINDOW", self._on_exit) main_thread_id = thread.get_ident() Scripting.main_thread_id = main_thread_id # To Do: WaveSyn will have a uniform command slot system. from wavesynlib.interfaces.xmlrpc.server import CommandSlot # Construct Constants from wavesynlib.languagecenter.wavesynscript import Constant class Constants(object): __slots__ = ( 'ASK_DIALOG', 'ASK_OPEN_FILENAME', 'ASK_SAVEAS_FILENAME', 'ASK_FILES', 'ASK_ORDERED_FILES', 'ASK_SLICE' ) for name in __slots__: locals()[name] = Constant(name) # End Construct Constants value_checker = ValueChecker(root) # File Utils Node class TarFileManipulator(ModelNode): def __init__(self, *args, **kwargs): filename = kwargs.pop('filename') ModelNode.__init__(self, *args, **kwargs) with self.attribute_lock: self.filename = filename @property def node_path(self): return eval_format('{self.parent_node.node_path}["{self.filename}"]') @Scripting.printable def extract_all(self, directory): if directory is self.root_node.constants.ASK_DIALOG: directory = askdirectory(initialdir=os.getcwd()) if not directory: return tar = tarfile.open(self.filename) tar.extractall(directory) class TarFileManager(ModelNode): def __init__(self, *args, **kwargs): ModelNode.__init__(self, *args, **kwargs) def __getitem__(self, filename): if filename is self.root_node.constants.ASK_DIALOG: filename = askopenfilename(filetypes=[('TAR Files', ('*.tar', '*.tar.gz', '*.tgz')), ('All Files', '*.*')]) if not filename: return manipulator = TarFileManipulator(filename=filename) object.__setattr__(manipulator, 'parent_node', self) manipulator.lock_attribute('parent_node') return manipulator class FileUtils(ModelNode): def __init__(self, *args, **kwargs): ModelNode.__init__(self, *args, **kwargs) self.pdf_files = ModelNode(is_lazy=True, module_name='wavesynlib.interfaces.pdf.modelnode', class_name='PDFFileManager') self.touchstone_files = ModelNode(is_lazy=True, module_name='wavesynlib.interfaces.devcomm.touchstone.modelnode', class_name='TouchstoneFileManager') self.tar_files = ModelNode(is_lazy=True, class_object=TarFileManager) self.file_utils = FileUtils() # End File Utils Node with self.attribute_lock: set_attributes(self, # UI elements root = root, tk_root = root, balloon = Tix.Balloon(root), taskbar_icon = TaskbarIcon(root), interrupter = InterrupterNode(), dialogs = Dialogs(self), # End UI elements # Constants constants = Constants, # End Constants # OS interfaces os = OperatingSystem(), # End OS interfaces # Thread related main_thread_id = main_thread_id, exec_thread_lock = threading.RLock(), # End model_tree_monitor = model_tree_monitor, # To Do: WaveSyn will have a uniform command slot system. xmlrpc_command_slot = CommandSlot(), lang_center = LangCenterNode(), # Validation Functions value_checker = value_checker, check_int = value_checker.check_int, check_float = value_checker.check_float, check_positive_float = value_checker.check_positive_float, # End Validation Functions file_path = file_path, dir_path = dir_path, stream_manager = StreamManager(), config_file_path = config_file_path # cudaWorker = CUDAWorker() ) # Timer utils self.timer = timeutils.ActionManager() self.timer.after = timeutils.TimerActionNode(type_='after') self.timer.every = timeutils.TimerActionNode(type_='every') # End Timer utils from wavesynlib.toolwindows.basewindow import WindowDict self.windows = WindowDict() # Instance of ModelNode can be locked automatically. self.editors = EditorDict() with self.attribute_lock: # The below one is the core of the new command system: self.command_queue = Queue.Queue() # The timer shown as follows checks the command queue # extracts command and execute. self.command_queue_timer = self.create_timer(interval=50, active=False) @SimpleObserver def command_queue_observer(): try: while True: command_slot = self.command_queue.get_nowait() if command_slot.source == 'local': node = command_slot.node_list[-1] if callable(node): node(*command_slot.args, **command_slot.kwargs) elif isinstance(node, ModelNode): getattr(node, command_slot.method_name)(*command_slot.args, **command_slot.kwargs) else: raise TypeError('The given object is not a ModelNode.') except Queue.Empty: return self.command_queue_timer.add_observer(command_queue_observer) self.command_queue_timer.active = True class EditorObserver(object): # use SimpleObserver instead def __init__(self, wavesyn): self.wavesyn = wavesyn def update(self, editor): wavesyn = self.wavesyn code = editor.code if not code: return wavesyn.stream_manager.write('WaveSyn: executing code from editor {0} listed as follows:\n'.format(id(editor)), 'TIP') wavesyn.stream_manager.write(code, 'HISTORY') wavesyn.stream_manager.write('\n') wavesyn.execute(code) self.editors.manager.add_observer(EditorObserver(self)) with self.attribute_lock: self.monitor_timer = self.create_timer(interval=100, active=False) # Make wavesyn.editors.manager check wavesyn.editors every 100ms self.monitor_timer.add_observer(self.editors.manager) # Check std streams every 100ms self.monitor_timer.add_observer(self.stream_manager) frm = Frame(root) frm.pack(side=TOP, fill=X) self.console = ConsoleWindow(menu=console_menu, tag_defs=tag_defs) self.stream_manager.add_observer(self.console.stream_observer) #! #self.clipboard = Clipboard() self.scripting = Scripting(self) self.no_tip = False self.monitor_timer.active = True self._add_env_path()
def __init__(self, *args, **kwargs): Frame.__init__(self, *args, **kwargs) timer = TkTimer(widget=self, interval=200, active=False) balloon = Scripting.root_node.balloon self.__busy_lamp = six.moves.tkinter.Label(self, bg='forestgreen', width=1) self.__busy_lamp.pack(side=RIGHT, fill='y') self.__membar = IntVar(0) self._make_mem_status() # Transparent Scale { def on_scale(val): Scripting.root_node.console.set_transparency(val) trans_scale = Scale(self, from_=0.2, to=1.0, orient='horizontal', value=1, command=on_scale) trans_scale.pack(side='right') balloon.bind_widget(trans_scale, balloonmsg='Set the transparency of the console.') # } End Transparent Scale # Topmost Button { import six.moves.tkinter as tkinter topmost_button = tkinter.Button(self, text='TOP', relief='groove') topmost_button.pack(side='right') def on_click(): tk_root = Scripting.root_node.tk_root b = bool(tk_root.wm_attributes('-topmost')) fg = 'black' if b else 'lime green' topmost_button['fg'] = fg tk_root.wm_attributes('-topmost', not b) topmost_button['command'] = on_click balloon.bind_widget(topmost_button, balloonmsg='Set the console as a topmost window.') # } End Topmost Button #{ Window Combo window_combo = Combobox(self, value=[], takefocus=1, stat='readonly') def on_selected(event): text = event.widget.get() wid = int(text.split(':')[1].strip()) Scripting.root_node.windows[wid].tk_object.deiconify() window_combo.bind('<<ComboboxSelected>>', on_selected) window_combo.pack(side='right', fill='y') # deiconify a window @SimpleObserver def on_windows_change(node, command): values = window_combo['values'] if values == '': values = [] if isinstance(values, tuple): values = list(values) node_id = id(node) if command == 'new': type_name = node.__class__.__name__ values.append(eval_format('{type_name}: {node_id}')) elif command == 'del': for index, value in enumerate(values): wid = int(value.split(':')[1].strip()) if node_id == wid: del values[index] window_combo['values'] = values if len(values) > 0: window_combo.current(len(values)-1) else: window_combo.set('') Scripting.root_node.windows.add_observer(on_windows_change) #} End Window Combo self.__lock = thread.allocate_lock() self.__busy = False get_memory_usage = Scripting.root_node.os.get_memory_usage @SimpleObserver def check_busy(): self._set_busy_light() @SimpleObserver def check_mem(): self.__membar.set(get_memory_usage()) timer.add_observer(check_busy) timer.divider(divide_by=10).add_observer(check_mem) timer.active = True
def __init__(self, *args, **kwargs): TkToolWindow.__init__(self, *args, **kwargs) Observable.__init__(self) self.__serialmap = None # Temporarily self.inst = Inst() # End Temporarily #window = self.tk_object tooltab = Frame(self._tool_tabs) self._tool_tabs.add(tooltab, text='SPI') #tooltab.pack(expand='yes', fill='x') # Group OPEN open_group = Group(tooltab) open_group.name = 'Open Device' open_group.pack(side='left', fill='y', expand='yes') self.__dev_combo = dev_combo = Combobox(open_group, value=[], takefocus=1, stat='readonly', width=12) dev_combo.bind('<<ComboboxSelected>>', self._on_dev_change) self.__current_serialno = None dev_combo.pack(side='top') self.__is_opened = IntVar(0) self.__open_check = open_check = Checkbutton(open_group, text='Open', variable=self.__is_opened, command=self._on_open_click) open_check.pack(expand='yes', fill='y', side='top') # End Group Open # Group Parameters param_group = Group(tooltab) param_group.name = 'Parameters' param_group.pack(side='left') Button(param_group, text='Configure', command=self._on_param_change).pack(side='bottom') param_frame = Frame(param_group) param_frame.pack() self.__CPOL = CPOL = IntVar(0) self.__CPHA = CPHA = IntVar(0) Checkbutton(param_frame, text='CPOL', variable=CPOL).grid(row=0, column=0) Checkbutton(param_frame, text='CPHA', variable=CPHA).grid(row=1, column=0) self.__baud_combo = baud_combo = Combobox(param_frame, value=[], takefocus=1, stat='readonly', width=8) baud_combo.grid(row=0, column=1, columnspan=2) self.__read_timeout_str = r_timeout = StringVar() self.__write_timeout_str = w_timeout = StringVar() Entry(param_frame, textvariable=r_timeout, width=5).grid(row=1, column=1) Entry(param_frame, textvariable=w_timeout, width=5).grid(row=1, column=2) # End Group Parameters # Write Group write_group = Group(tooltab) write_group.name = 'Write' write_group.pack(side='left', fill='y', expand='yes') self.__writebuf = writebuf = StringVar() Entry(write_group, textvariable=writebuf).pack() Button(write_group, text='Write', command=self._on_write_click).pack() # End Write Group self._make_window_manager_tab() # To Do: a driver group for loading specified spi bus driver converter = USBSPIConverter() converter.add_observer(self) self.add_observer(converter)
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()