Bonjour

avec le 1er code, time() renvoit le temps
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
import sys
import traceback
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)
 
if __name__ == "__main__":
    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)
 
    console = InteractiveConsole(d)
    console.interact()
je voudrais faire la même chose sur une console Tkinter:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()
je n'arrive pas configurer l'input method pour que reagisse comme dans le 1er code

Merci beaucoup