2010-05-18 12 views
6

मैं पाइथन (3.1.2)/emacs (23.2) newbie खुद को pythonware ट्यूटोरियल का उपयोग कर tkinter पढ़ रहा है here पाया। प्रासंगिक कोड प्रश्न के नीचे चिपकाया गया है।Emacs: Inferior-mode पायथन-खोल दिखाई देता है "lagged"

प्रश्न: जब मैं हैलो बटन पर क्लिक करता हूं (जिसे say_hi फ़ंक्शन को कॉल करना चाहिए) क्यों अवरुद्ध पायथन खोल (यानी जिसे मैंने सीसी सीसी के साथ लात मार दिया है) तब तक कहने के लिए प्रतीक्षा करें जब तक मैं या तो एक क्लिक नहीं करता) बाहर निकलें बटन या बी) रूट विजेट को बंद करें? जब मैं निष्क्रिय में एक ही प्रयास करते हैं, हैलो बटन के प्रत्येक क्लिक निष्क्रिय अजगर खोल में एक तत्काल प्रिंट पैदा करता है, यहां तक ​​कि इससे पहले कि मैं क्लिक करें छोड़ो या रूट विजेट बंद कर दें।

वहाँ रास्ता Emacs में कुछ मोड़ है अजगर खोल (बनाम निष्क्रिय) है कि यह "लेग्ड" व्यवहार का कारण बनता है चलाता है? मैं इसी तरह की Emacs ध्यान दिया है बनाम निष्क्रिय lags के रूप में मैं परियोजना यूलर समस्याओं के माध्यम से काम किया है, लेकिन यह स्पष्ट उदाहरण मैं अभी तक देखा है है।

FYI करें: मैं python.el का उपयोग करें और एक अपेक्षाकृत स्वच्छ init.el ...

है (setq अजगर-अजगर-कमांड "d:/bin/python31/अजगर")

है मेरी init.el में केवल लाइन

धन्यवाद,

माइक

=== कोड ===

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() 
+0

कोशिश 'प्रिंट ('एबीसी', फ़ाइल = sys.stderr)' यह मुद्दों बफरिंग किया जा सकता है (उत्पादन सांत्वना देने लाइन बफ़र किया जा सकता है, लेकिन उत्पादन पाइप के लिए/फ़ाइल बफर तय कर दी है हो सकता है)। – jfs

+0

काम नहीं किया। sys.stdout.flush() [एमएसडब्ल्यू का जवाब नीचे] काम किया। टिप्पणी के लिए धन्यवाद, यद्यपि! – MikeRand

उत्तर

4

शुरू मुझे लगता है कि होता है कि एक tty से जुड़ी नहीं किया जा रहा, पायथन दुभाषिया (सी stdio के माध्यम से) लाइन buffered से buffered ब्लॉक करने के लिए स्विच और बंद होने तक stdout फ्लश नहीं करता है। एक में os.isatty(1) चल रहा है "अवर पायथन: शैल संकलित चलाने 'बफर झूठी देता है, इस प्रकार इस अनुमान को वजन बढ़ने।

def say_hi(self): 
    print("hi there, everyone!") 
    sys.stdout.flush() 

कोई फर्क पड़ सकता है।

+0

प्रिंट प्रिंट पर काम किया। कुछ अजीब कारणों से, अवरुद्ध बफर छोड़ने/बंद पर लटकता है। एक अलग मुद्दा, हालांकि ... आपकी मदद के लिए बहुत बहुत धन्यवाद। – MikeRand

+0

Tkinter में घटना पाश कुछ अजीब गुण है कि मैं गहराई में कभी नहीं का पता लगाया है है। मुझे पता है कि आईडीएलई के तहत टिंकर विचित्र रूप से व्यवहार करता है, मैं अनुमान लगा रहा हूं कि इवेंट लूप्स को डुप्लिकेट करने के कारण। – msw

+0

अच्छा परिप्रेक्ष्य ... जब मैं इस पर बहुत बेहतर हो जाता हूं तो कुछ। एक बार फिर धन्यवाद। – MikeRand

संबंधित मुद्दे