2015-02-07 8 views
6

ऐसा लगता है कि वस्तु है कि इस विधि खिड़की पैरामीटर के रूप में पारित कर दिया इससे पहले कि नष्ट हो अपने स्वयं के पाश के साथ जारी रखने के लिए इंतजार कर रहा है कहता है ..."wait_window" विधि क्या करती है?

Misc वर्ग के डॉक तार से, हम देख सकते हैं:

def wait_window(self, window=None): 
    """Wait until a WIDGET is destroyed. 
    If no parameter is given self is used.""" 

पहली नज़र में, यह इस पद्धति का एक Toplevel मोडल बना सकते हैं की तरह लगता है, लेकिन यह सच नहीं है। Toplevel मोडल बनाने के लिए, हमें grab_set() विधि का उपयोग करना होगा।

मैं अन्य स्पष्टीकरण के आसपास देखने की है:

wait_window निर्धारित विजेट के रूप में पैरामीटर नष्ट नहीं है पारित कर दिया जब तक वापस नहीं जा रहा है।

एक अन्य जगह से:

wait_window(widget) - एक स्थानीय घटना के लिए दिया विजेट नष्ट हो इंतजार कर रहा है कि बनाता है। यह लूप एप्लिकेशन के मेनलोप को प्रभावित नहीं करता है।

effbot प्रलेखन से, हमने:

wait_window एक स्थानीय घटना पाश में प्रवेश, और वापस नहीं करता है जब तक दिया खिड़की नष्ट हो जाता है (या तो नष्ट विधि, या स्पष्ट रूप से के माध्यम से विंडो प्रबंधक के माध्यम से):

widget.wait_window(window) 

क्या वास्तव में एक के लिए इसका मतलब windowwindow (स्वयं) के लिए प्रतीक्षा करें?

ऐसा लगता है कि wait_window पर कॉल के बाद आने वाला कोड तब तक निष्पादित नहीं होता है जब तक कि उसी विधि में पारित विंडो नष्ट नहीं होती है।

from tkinter import * 

def on_win_request(parent): 
    dialog = Toplevel() 
    parent.wait_window(dialog) 
    # executed only when "dialog" is destroyed 
    print("Mini-event loop finished!") 

r = Tk() 
b = Button(r, text='New Window', command=lambda: on_win_request(r)) 
b.pack() 
b2 = Button(r, text='Hello!', command=lambda: print("hello")) 
b2.pack() 
r.mainloop() 

"Mini-event loop finished!" प्रिंट किया जाएगा केवल जब स्थानीय Toplevel विजेट dialog कहा जाता है को नष्ट कर दिया जाता है: अगले कार्य उदाहरण में, हम क्या सिर्फ इतना कहा पर एक प्रमाण देख सकते हैं।

तो, इस विधि का उपयोग करने के लिए वास्तव में मुझे किस वास्तविक परिस्थितियों में उपयोग करना चाहिए?

+0

मुझे लगता है कि जब तक संवाद विंडो नष्ट नहीं हो जाती है तब तक मैं निर्माता को एप्लिकेशन को अवरुद्ध करता हूं। आप माता-पिता पर इंतजार नहीं करना चाहेंगे, क्योंकि आप केवल तब तक अवरुद्ध करना चाहते हैं जब तक कि उपयोगकर्ता बातचीत के साथ इंटरैक्ट नहीं करता। मैंने उचित जवाब नहीं दिया है क्योंकि मैंने उम्र में जीयूआई प्रोग्रामिंग नहीं की है और मुझे यकीन नहीं है कि मुख्य धागा जीयूआई कार्यक्रमों के साथ कैसे काम करता है। – Jmac

+0

@Jmac मैं माता-पिता पर इंतजार क्यों नहीं करना चाहूंगा? जहां तक ​​मैंने समझा है, माता-पिता संवाद के लिए इंतजार कर रहे हैं। असल में क्या होगा कि जिस खिड़की के लिए माता-पिता इंतजार कर रहे हैं, अपने स्थानीय लूप में प्रवेश करता है। – nbro

+0

@Jmac जहां तक ​​यह 'effbot' पर बताया गया है,' wait_window' स्थानीय ईवेंट लूप में प्रवेश करता है, और दिए गए विंडो तक वापस नहीं आता है क्योंकि पैरामीटर नष्ट हो जाता है। तो, अगर हम माता-पिता पर 'wait_window' कहते हैं, तो हम स्थानीय लूप पर प्रवेश करेंगे (मुझे लगता है कि संवाद पर, या शायद नहीं?) और जब तक संवाद नष्ट नहीं हो जाता तब तक हम अभिभावक को नियंत्रण वापस नहीं करेंगे .. – nbro

उत्तर

7

प्रलेखन राज्यों की तरह, यह तब तक प्रतीक्षा करता है जब तक दी गई विंडो नष्ट न हो जाए। यह ज्यादातर मोडल पॉपअप के लिए प्रयोग किया जाता है, हालांकि यह स्वयं खिड़की मोडल नहीं बनाता है। खिड़की नष्ट होने तक यह केवल वर्तमान कोड को रोक देता है। एक मोडल विंडो बनाने के लिए आपको एक हड़पने भी करना है।

सबसे आम उपयोग टोपवेल के उदाहरण को बनाना है, विजेट के साथ उस विंडो को पॉप्युलेट करें, फिर कुछ अन्य क्रिया करने से पहले खिड़की को खारिज कर दें।

उदाहरण के लिए, आप मुख्य जीयूआई को अक्षम (या निर्माण की रोकथाम) को अक्षम कर सकते हैं, "सेवा की शर्तें" नोटिस पॉप अप कर सकते हैं, और उपयोगकर्ता को सेवा, कॉपीराइट, लाइसेंस इत्यादि की शर्तों को स्वीकार करने के लिए प्रतीक्षा कर सकते हैं। एक बार खिड़की नष्ट हो गई है, फिर आप प्रारंभिकरण खत्म कर सकते हैं, या कुछ विजेट सक्षम कर सकते हैं, आदि

मानक फ़ाइल संवाद एक आदर्श उदाहरण है: आप संवाद पॉप अप करते हैं, तो आपका कोड उपयोगकर्ता को फ़ाइल लेने के लिए इंतजार करता है, फिर यह उपयोग करता है लौटाया गया फ़ाइल नाम। आंतरिक रूप से, संवाद का कार्यान्वयन wait_window का उपयोग करता है ताकि जब तक संवाद को खारिज नहीं किया जाता है तब तक यह वापस नहीं आता है।

+1

मुझे समझ में आया, लेकिन वास्तविक परिस्थितियों में यह उपयोगी क्यों होना चाहिए? क्या आप कृपया मुझे कुछ उदाहरण दिखा सकते हैं? – nbro

+0

@rinzler: फ़ाइल संवाद एक उदाहरण है: उपयोगकर्ता को फ़ाइल लेने के लिए कहें, फिर फ़ाइल लोड करें। चेतावनी विंडोज़ एक और उदाहरण हैं। मूलभूत संवादों की कमी वाले प्लेटफ़ॉर्म पर, संवाद को अपरिवर्तनीय विंडो के रूप में कार्यान्वित किया जाता है और उपयोगकर्ता को बटन पर क्लिक करने के लिए 'प्रतीक्षा_विंडो' का उपयोग करने के लिए, फ़ाइल का चयन करें, फ़ॉन्ट चुनें, आदि –

+0

लेकिन कुछ उदाहरणों में, हमारे पास 'विंडो है। wait_window (विंडो) ', खिड़की के लिए इसका क्या मतलब है अपने लिए इंतजार? 'Root.wait_window (विंडो) 'का क्या अंतर है? – nbro

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