def _fillRightBottom(self, bottom): self.text = TaggedText(bottom, width=40, height=15, bg='white', takefocus=0) self.text.grid(row=0, column=0, sticky='news')
def createMessageBody(bodyFrame, message, image, frameBg='white', textBg='white', textPad=5): """ Create a Text containing the message. Params: bodyFrame: tk.Frame to be filled. msg: a str or list with the lines. """ bodyFrame.config(bg=frameBg, bd=0) text = TaggedText(bodyFrame, bg=textBg, bd=0, highlightthickness=0) # Insert image if image: label = tk.Label(bodyFrame, image=image, bg=textBg, bd=0) label.grid(row=0, column=0, sticky='nw') text.frame.grid(row=0, column=1, sticky='news', padx=textPad, pady=textPad) fillMessageText(text, message) bodyFrame.rowconfigure(0, weight=1) bodyFrame.columnconfigure(1, weight=1) return text
class ObjectBrowser(tk.Frame): """ This class will implement a simple object browser. Basically, it will display a list of elements at the left panel and can display a preview and description on the right panel for the selected element. An ObjectView will be used to grab information for each element such as: icon, preview and description. A TreeProvider will be used to populate the list (Tree). """ def __init__(self, parent, treeProvider, showPreview=True, showPreviewTop=True, **args): tk.Frame.__init__(self, parent, **args) self.treeProvider = treeProvider self._lastSelected = None gui.configureWeigths(self) self.showPreviewTop = showPreviewTop # The main layout will be two panes, # At the left containing the elements list # and the right containing the preview and description p = tk.PanedWindow(self, orient=tk.HORIZONTAL) p.grid(row=0, column=0, sticky='news') leftPanel = tk.Frame(p) self._fillLeftPanel(leftPanel) p.add(leftPanel, padx=5, pady=5) p.paneconfig(leftPanel, minsize=300) if showPreview: rightPanel = tk.Frame(p) self._fillRightPanel(rightPanel) p.add(rightPanel, padx=5, pady=5) p.paneconfig(rightPanel, minsize=200) # Register a callback when the item is clicked self.tree.itemClick = self._itemClicked def _fillLeftPanel(self, frame): gui.configureWeigths(frame) self.tree = BoundTree(frame, self.treeProvider) self.tree.grid(row=0, column=0, sticky='news') self.itemConfig = self.tree.itemConfig self.getImage = self.tree.getImage def _fillRightPanel(self, frame): frame.columnconfigure(0, weight=1) if self.showPreviewTop: top = tk.Frame(frame) top.grid(row=0, column=0, sticky='news') frame.rowconfigure(0, weight=3) gui.configureWeigths(top) top.rowconfigure(0, minsize=200) self._fillRightTop(top) bottom = tk.Frame(frame) bottom.grid(row=1, column=0, sticky='news') frame.rowconfigure(1, weight=1) gui.configureWeigths(bottom) bottom.rowconfigure(1, weight=1) self._fillRightBottom(bottom) def _fillRightTop(self, top): self.noImage = self.getImage('no-image128.png') self.label = tk.Label(top, image=self.noImage) self.label.grid(row=0, column=0, sticky='news') def _fillRightBottom(self, bottom): self.text = TaggedText(bottom, width=40, height=15, bg='white', takefocus=0) self.text.grid(row=0, column=0, sticky='news') def _itemClicked(self, obj): self._lastSelected = obj img, desc = self.treeProvider.getObjectPreview(obj) # Update image preview if self.showPreviewTop: if isinstance(img, str): img = self.getImage(img) if img is None: img = self.noImage self.label.config(image=img) # Update text preview self.text.setReadOnly(False) self.text.clear() if desc is not None: self.text.addText(desc) self.text.setReadOnly(True) if hasattr(self, 'entryLabel') and not self._lastSelected.isDir(): self.entryVar.set(self._lastSelected.getFileName()) def getSelected(self): """ Return the selected object. """ return self._lastSelected
class ObjectBrowser(tk.Frame): """ This class will implement a simple object browser. Basically, it will display a list of elements at the left panel and can display a preview and description on the right panel for the selected element. An ObjectView will be used to grab information for each element such as: icon, preview and description. A TreeProvider will be used to populate the list (Tree). """ def __init__(self, parent, treeProvider, showPreview=True, showPreviewTop=True, **args): tk.Frame.__init__(self, parent, **args) self.treeProvider = treeProvider self._lastSelected = None gui.configureWeigths(self) self.showPreviewTop = showPreviewTop # The main layout will be two panes, # At the left containing the elements list # and the right containing the preview and description p = tk.PanedWindow(self, orient=tk.HORIZONTAL) p.grid(row=0, column=0, sticky='news') leftPanel = tk.Frame(p) self._fillLeftPanel(leftPanel) p.add(leftPanel, padx=5, pady=5) p.paneconfig(leftPanel, minsize=300) if showPreview: rightPanel = tk.Frame(p) self._fillRightPanel(rightPanel) p.add(rightPanel, padx=5, pady=5) p.paneconfig(rightPanel, minsize=200) # Register a callback when the item is clicked self.tree.itemClick = self._itemClicked def _fillLeftPanel(self, frame): gui.configureWeigths(frame) self.tree = BoundTree(frame, self.treeProvider) self.tree.grid(row=0, column=0, sticky='news') self.itemConfig = self.tree.itemConfig self.getImage = self.tree.getImage def _fillRightPanel(self, frame): frame.columnconfigure(0, weight=1) if self.showPreviewTop: top = tk.Frame(frame) top.grid(row=0, column=0, sticky='news') frame.rowconfigure(0, weight=3) gui.configureWeigths(top) top.rowconfigure(0, minsize=200) self._fillRightTop(top) bottom = tk.Frame(frame) bottom.grid(row=1, column=0, sticky='news') frame.rowconfigure(1, weight=1) gui.configureWeigths(bottom) bottom.rowconfigure(1, weight=1) self._fillRightBottom(bottom) def _fillRightTop(self, top): self.noImage = self.getImage('no-image128.png') self.label = tk.Label(top, image=self.noImage) self.label.grid(row=0, column=0, sticky='news') def _fillRightBottom(self, bottom): self.text = TaggedText(bottom, width=40, height=15, bg='white') self.text.grid(row=0, column=0, sticky='news') def _itemClicked(self, obj): self._lastSelected = obj img, desc = self.treeProvider.getObjectPreview(obj) # Update image preview if self.showPreviewTop: if isinstance(img, str): img = self.getImage(img) if img is None: img = self.noImage self.label.config(image=img) # Update text preview self.text.setReadOnly(False) self.text.clear() if desc is not None: self.text.addText(desc) self.text.setReadOnly(True) def getSelected(self): """ Return the selected object. """ return self._lastSelected
def _fillRightBottom(self, bottom): self.text = TaggedText(bottom, width=40, height=15, bg='white') self.text.grid(row=0, column=0, sticky='news')