Ich bin ein Python (3.1.2)/emacs (23.2) Neuling lehrt mich tkinter mit dem Python-Tutorial gefunden here. Relevanter Code wird unterhalb der Frage eingefügt.Emacs: Inferior-Modus Python-Shell erscheint "lagged"
Frage: wenn ich auf die Hello-Schaltfläche klicke (was die say_hi-Funktion aufrufen sollte), wartet die inferiore Python-Shell (dh diejenige, die ich mit Cc Cc gestartet habe) auf die say_hi-Druckfunktion, bis ich entweder a) klicke die Schaltfläche Beenden oder b) das Root-Widget schließen? Wenn ich dasselbe in IDLE versuche, erzeugt jeder Klick auf die Schaltfläche Hello einen sofortigen Ausdruck in der IDLE-Python-Shell, noch bevor ich auf Quit klicke oder das Root-Widget schließe.
Gibt es irgendeine Eigenart in der Art, wie Emacs die Python-Shell (vs. IDLE) ausführt, die dieses "verzögerte" Verhalten verursacht? Ich habe ähnliche Emacs-Verzögerungen im Vergleich zu IDLE bemerkt, da ich Probleme mit dem Projekt Euler bearbeitet habe, aber dies ist das klarste Beispiel, das ich bisher gesehen habe.
FYI: Ich benutze python.el und haben eine relativ saubere init.el ...
(setq Python-Python-Befehl "d:/bin/python31/Python")
ist die nur Zeile in meinem init.el.
Danke,
Mike
===-Code Start ===
from tkinter import *
class App:
def __init__(self,master):
frame = Frame(master)
frame.pack()
self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)
self.button.pack(side=LEFT)
self.hi_there = Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=LEFT)
def say_hi(self):
print("hi there, everyone!")
root = Tk()
app = App(root)
root.mainloop()
probiere 'print ('abc', file = sys.stderr)' es könnte Probleme mit der Pufferung geben (die Ausgabe an die Konsole könnte liniengepuffert sein, aber die Ausgabe an pipe/file könnte einen festen Puffer haben). – jfs
Hat nicht funktioniert. sys.stdout.flush() [msws Antwort unten] hat funktioniert. Danke für den Kommentar! – MikeRand