1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
| from threading import Thread
from Queue import Queue
from Tkinter import *
from tkMessageBox import *
import os
from code import InteractiveConsole
import datetime
import time
class Test:
def __init__(self):
pass
def init(self):
self.text = ""
def time(self):
now = datetime.datetime.now()
print str(now)
class ScrolledText(Frame):
def __init__(self, parent =None, text ='', file =None):
Frame.__init__(self, parent)
self.pack(expand=YES,side=LEFT, fill=BOTH) # make me expandable
self.make_widgets()
self.settext(text, file)
def make_widgets(self):
sbar = Scrollbar(self)
text = Text(self, relief=SUNKEN)
sbar.config(command =text.yview) # xlink sbar and text
text.config(yscrollcommand =sbar.set) # move one moves other
sbar.pack(side=RIGHT, fill=Y) # pack first=clip last
text.pack(side=LEFT, expand=YES, fill=BOTH) # text clipped first
self.text = text
def settext(self, text ='', file =None):
if file:
text = open(file, 'r').read()
self.text.delete('1.0', END) # delete current text
self.text.insert('1.0', text) # add at line 1, col 0
self.text.mark_set(INSERT, '1.0') # set insert cursor
self.text.focus() # save user a click
def gettext(self): # returns a string
return self.text.get('1.0', END+'-1c') # first through last
class Shell(ScrolledText):
@staticmethod
def iconsole():
global _t
_t = Test()
items = _t.__class__.__dict__.items()
d = {"_t" : _t} # Add the tester instance
for key, val in items:
if key and key[0] != '_' and key != "_t":
funcdef = '''def %s(*args):\n """%s"""\n return _t.%s(*args)'''
exec( funcdef % (key, val.__doc__, key))
d[key] = eval(key)
ic = InteractiveConsole(d)
ic.interact(sys.stdin)
@staticmethod
def ibuffer(get, put):
char_buff = []
while True:
try:
result = get()
except (IOError, EOFError):
put("".join(char_buff) + '\n')
break
if 'Return' == result.keysym:
put("".join(char_buff) + '\n')
char_buff = []
elif 'BackSpace' == result.keysym:
try:
char_buff.pop()
except IndexError:
pass
elif len(result.char) == 1:
char_buff.append(result.char)
def __init__(self, parent =None):
ScrolledText.__init__(self, parent =None)
self.charque = Queue()
self.lineque = Queue()
# self.bind_all('<Key>', self._key)
sys.stdout = self
sys.stderr = self
sys.stdin = self
self._start_threads()
def _start_threads(self):
self.ic = Thread(target =self.iconsole)
self.ic.deamon = True
self.ic.start()
self.ib = Thread(target =self.ibuffer, args =(self.charque.get, self.lineque.put))
self.ib.deamon = True
self.ib.start()
# def _key(self, event):
# label1.config(text = event.keysym)
# self.charque.put(event)
def readline(self):
return self.lineque.get()
def write(self, stuff):
self.text.insert("end", stuff)
self.text.yview_pickplace("end")
def flush(self):
return None
#def writelines(self, lines):
#for line in lines:
#self.write(line)
class MenuBar(Menu):
def __init__(self, *args, **kwargs):
Menu.__init__(self, *args, **kwargs)
self.create_widgets()
def not_impl(self):
showerror(message ='Not implemented')
def create_widgets(self):
file_menu = Menu(self)
file_menu.add_command(label ='Open', command =self.not_impl)
file_menu.add_command(label ='Save', command =self.not_impl)
file_menu.add_command(label ='Quit', command =self.quit)
self.add_cascade(label="File", underline=1, menu =file_menu)
class Graph(Frame):
def __init__(self, parent =None):
Frame.__init__(self, parent)
self.pack(expand=YES,side=RIGHT, fill=BOTH)
self.x = 20
self.y = 23
self.canvas = Canvas(width=300, height=300, bg='white')
self.canvas.pack(expand=YES,side=RIGHT, fill=BOTH)
for i in range(1, 300, 20):
self.canvas.create_line(0, i, 300, i)
self.canvas.create_line(i, 0, i, 300)
self.oval=self.canvas.create_oval(self.x, self.y, self.x + 10, self.y + 10,fill='blue')
#sleep(10)
self.set(90,30)
def set(self, x1, y1):
self.x = x1
self.y = y1
def evt(self):
self.canvas.itemconfigure(self.oval, fill='green')
self.canvas.itemconfigure(self.oval, fill='yellow')
class MainFrame(Frame):
def __init__(self, parent =None, title =None,**kwargs):
Frame.__init__(self, parent)
self.pack(expand =YES, fill =BOTH)
self.create_widgets(title)
def create_widgets(self, title =None):
self.menu_bar = MenuBar(self.master)
self.master.config(menu =self.menu_bar)
self.master.title(title)
self.shell = Shell(self)
self.shell.pack()
if __name__ == '__main__':
root = Tk()
# t = Toplevel()
# label1 = Label(t, text='press', width=40)
# label1.pack()
frame = MainFrame(root, title ='fireflies')
graph = Graph(root)
root.mainloop() |
Partager