2010-10-01 3 views
6

इस कोड के साथ, खिड़की 500 500, के द्वारा होता है जो है जो मैं के लिए जा रहा हूँ:टेक्स्ट बॉक्स में जोड़े जाने पर टिंकर फ्रेम का आकार क्यों बदलता है?

from tkinter import * 
root = Tk() 

frame = Frame(root, width=500, height=500) 

frame.pack() 
root.mainloop() 

जब मैं फ्रेम करने के लिए एक पाठ बॉक्स जोड़ने के लिए, हालांकि, यह सिर्फ पाठ के आकार के लिए सिकुड़ बॉक्स:

from tkinter import * 
root = Tk() 

frame = Frame(root, width=500, height=500) 

text = Text(frame, width=10, height=2) # THESE TWO 
text.pack()       # LINES HERE 

frame.pack() 
root.mainloop() 

ऐसा क्यों होता है, और मैं इसे कैसे होने से रोक सकता हूं?

उत्तर

6

डिफ़ॉल्ट रूप से फ्रेम "पैक प्रचार" चालू है। इसका मतलब है कि पैकर "गणना करता है कि एक मास्टर को अपने दासों की आवश्यकताओं को पूरी तरह से पूरा करने के लिए कितना बड़ा होना चाहिए, और यह मास्टर के अनुरोधित चौड़ाई और ऊंचाई को इन आयामों पर सेट करता है" (आधिकारिक टीसीएल/टीके मैन पेजों से उद्धरण [1])।

अधिकांश मामलों के लिए यह सही सही व्यवहार है। उन समयों के लिए जिन्हें आप यह नहीं चाहते हैं, आप मास्टर पर pack_propagate पर कॉल कर सकते हैं और मान को गलत पर सेट कर सकते हैं। मुझे लगता है कि टीके प्रोग्रामिंग के करीब 20 वर्षों में मुझे केवल आधा दर्जन बार ऐसा करने की ज़रूरत है, अगर ऐसा है।

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

+0

अद्भुत, बहुत बहुत धन्यवाद! – Kiwi