Я - Python (3.1.2)/emacs (23.2) новичок, учащий мне tkinter использование pythonware учебного руководства, найденного здесь. Соответствующие нормы вставляются ниже вопроса.
Вопрос: когда я нажимаю кнопку Hello (который должен вызвать say_hi функцию), почему делает нижнюю оболочку Python (т.е. тот, который я начал с C-c C-c), ожидают для выполнения функции печати say_hi, пока я любой не a) нажмите кнопку Quit или b) закрывает корневой виджет? Когда я пробую то же в НЕАКТИВНОМ, каждый щелчок кнопки Hello производит непосредственную печать в НЕАКТИВНОЙ оболочке Python, даже прежде чем я нажму Quit или закрою корневой виджет.
Есть ли некоторая причуда в пути emacs, выполняет оболочку Python (по сравнению с Неактивным), который вызывает это "изолированное" поведение? Я заметил подобные задержки emacs по сравнению с Неактивным, поскольку я работал через Euler проблемы Проекта, но это - самый ясный пример, который я видел все же.
К вашему сведению: Я использую python.el и имею относительно чистый init.el...
(setq команда Python Python "d:/bin/python31/python")
единственная строка в моем init.el.
Спасибо,
Mike
=== Начните код ===
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()
Я бы предположил, что не будучи подключенным к tty, интерпретатор Python (через C stdio) переключается на block buffered от line buffered и не промывает stdout до закрытия. Выполнение os.isatty(1)
в буфере "Inferior Python:run Shell Compile" возвращает false, что добавляет весомости этой догадке.
def say_hi(self):
print("hi there, everyone!")
sys.stdout.flush()
Может иметь значение.