blob: f44e09c2f571f07e2d973a61f88c6aa26f94b2f8 [file] [log] [blame]
#!/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()