# ##################################################### # Simple Python Terminal # Interface class # # Copyright 2010 - myBitBox.com # License granted for non-commercial use # # ##################################################### #!/usr/bin/python from Tkinter import * import sys, os, threading from time import gmtime, strftime import tkSimpleDialog class TerminalGUI(Frame): def __init__(self, parent=None, text=''): self.version_info = "1.1" self.write_lock = threading.Lock() Frame.__init__(self, parent) self.pack(expand=YES, fill=BOTH) self.makewidgets() self.clear() self.header() def header(self): self.addline_raw("================================================") self.addline_raw("Python Terminal Program") self.addline_raw("Version %s" % self.version_info) self.addline_raw("================================================") def makewidgets(self): sbar = Scrollbar(self) text = Text(self, relief=SUNKEN) sbar.config(command=text.yview) text.config(yscrollcommand=sbar.set) sbar.pack(side=RIGHT, fill=Y) text.pack(side=LEFT, expand=YES, fill=BOTH) text.tag_config("type1", background="yellow", foreground="red") text.tag_config("type2", foreground="blue") self.text_format = "" self.text = text def clear(self): self.text.delete('1.0', END) self.text.mark_set(INSERT, '1.0') self.text.focus() def addline_raw(self,txt): self.addline(txt,format=False,prompt=False) def addline(self, txt, format=True, endreturn=True,prompt=True ): self.write_lock.acquire() if format == True: self.text.insert('end',strftime("\n%d %b %H:%M:%S >", gmtime())); self.text.insert('end',("%s" %txt),self.text_format) else: self.text.insert('end',("%s" %txt),self.text_format) if(endreturn): self.text.insert('end','\n') if prompt: self.prompt() self.text.mark_set(INSERT, 'end') self.text.see(END) self.write_lock.release() return def format(self, type): if type == 1: self.text_format = "type1" elif type == 2: self.text_format = "type2" else: self.text_format = "" return def prompt(self): self.text.insert('end',strftime("%d %b %H:%M:%S >", gmtime())) return def question(self,txt = "Enter value"): return tkSimpleDialog.askstring(title = "Enter Value", prompt = txt) def exit(self): self.destroy() """ # Examples of how to interface to terminal def keybd(event): if os.name == 'nt': badkeys = [17,18,17,18,92,91,16,8] # CTRL, ALT, WIN, SHIFT, BACKSPACE elif os.name == 'posix': badkeys = [64,37,105,108,8] # CTRL, ALT, WIN, SHIFT, BACKSPACE #print event.keycode #ignore CTRL and ALT if event.keycode in badkeys: return run(event.keysym,keycode = event.keycode) return def run(key, keycode = 0): key = key.upper(); if key == 'Z': result = win.question("Enter Z value:"); win.addline("Running Z with arg %s" % result) elif key == 'Q': win.exit() elif key == 'H': win.help() win.prompt() elif keycode == 192: win.clear() win.header() win.prompt() else: win.addline("Unknown Command") return if __name__ == '__main__': root = Tk() win = TerminalGUI() root.bind('', keybd) root.mainloop() print "** Terminal Exit **" """