| #!/usr/bin/env python3 | |
| # | |
| #-------------------------------------------------------- | |
| # Text Report Window for the Open Galaxy characterization | |
| # tool (simple text window with contents read from file) | |
| # | |
| #-------------------------------------------------------- | |
| # Written by Tim Edwards | |
| # efabless, inc. | |
| # June 27, 2017 | |
| # Version 0.1 | |
| #-------------------------------------------------------- | |
| import os | |
| import re | |
| import tkinter | |
| from tkinter import ttk | |
| class TextReport(tkinter.Toplevel): | |
| """Open Galaxy text report window.""" | |
| def __init__(self, parent=None, fontsize = 11, *args, **kwargs): | |
| '''See the __init__ for Tkinter.Toplevel.''' | |
| tkinter.Toplevel.__init__(self, parent, *args, **kwargs) | |
| s = ttk.Style() | |
| s.configure('normal.TButton', font=('Helvetica', fontsize), border = 3, relief = 'raised') | |
| self.protocol("WM_DELETE_WINDOW", self.close) | |
| self.withdraw() | |
| self.title('Open Galaxy Text Report') | |
| self.texttitle = ttk.Label(self, style='title.TLabel', text = '(no text)') | |
| self.texttitle.grid(column = 0, row = 0, sticky = "news") | |
| self.textbar = ttk.Separator(self, orient='horizontal') | |
| self.textbar.grid(column = 0, row = 1, sticky = "news") | |
| self.hframe = tkinter.Frame(self) | |
| self.hframe.grid(column = 0, row = 2, sticky = "news") | |
| self.hframe.textdisplay = ttk.Frame(self.hframe) | |
| self.hframe.textdisplay.pack(side = 'left', fill = 'both', expand = 'true') | |
| self.hframe.textdisplay.page = tkinter.Text(self.hframe.textdisplay, wrap = 'word') | |
| self.hframe.textdisplay.page.pack(side = 'top', fill = 'both', expand = 'true') | |
| # Add scrollbar to text window | |
| self.hframe.scrollbar = ttk.Scrollbar(self.hframe) | |
| self.hframe.scrollbar.pack(side='right', fill='y') | |
| # attach text window to scrollbar | |
| self.hframe.textdisplay.page.config(yscrollcommand = self.hframe.scrollbar.set) | |
| self.hframe.scrollbar.config(command = self.hframe.textdisplay.page.yview) | |
| self.bbar = ttk.Frame(self) | |
| self.bbar.grid(column = 0, row = 3, sticky = "news") | |
| self.bbar.close_button = ttk.Button(self.bbar, text='Close', | |
| command=self.close, style = 'normal.TButton') | |
| self.bbar.close_button.grid(column = 0, row = 0, padx = 5) | |
| self.rowconfigure(0, weight=0) | |
| self.rowconfigure(1, weight=0) | |
| self.rowconfigure(2, weight=1) | |
| self.rowconfigure(3, weight=0) | |
| self.columnconfigure(0, weight=1) | |
| # Initialize with empty page | |
| self.text = [] | |
| self.title = '(No file to display)' | |
| self.timestamp = 0 | |
| def grid_configure(self, padx, pady): | |
| pass | |
| def display(self, filename=''): | |
| # Read from file if text is empty | |
| if filename != '': | |
| if filename == self.title: | |
| statbuf = os.stat(filename) | |
| if self.text == [] or self.timestamp < statbuf.st_mtime: | |
| self.add_text_from_file(filename) | |
| self.timestamp = statbuf.st_mtime | |
| else: | |
| self.add_text_from_file(filename) | |
| # Remove and replace contents | |
| self.hframe.textdisplay.page.delete('1.0', 'end') | |
| self.hframe.textdisplay.page.insert('end', self.text) | |
| self.textttitle.configure(text = self.title) | |
| self.open() | |
| # Fill the text report from a file. | |
| def add_text_from_file(self, filename): | |
| print('Loading text from file ' + filename) | |
| with open(filename, 'r') as f: | |
| self.text = f.read() | |
| self.title = filename | |
| self.display() | |
| def close(self): | |
| # pop down text window | |
| self.withdraw() | |
| def open(self): | |
| # pop up text window | |
| self.deiconify() | |
| self.lift() |