मेरे पास एक शीर्ष-स्तरीय विंडो है, जिसका विशिष्ट स्थान ज्यामिति स्ट्रिंग के माध्यम से सेट किया गया है। w.overrideredirect(True) कहा जाता है क्योंकि शीर्ष-स्तरीय विंडो में कोई विंडो प्रबंधक सजावट नहीं होनी चाहिए। आधिकारिक दस्तावेज कहता है:

इस फ़्लैग को सेट करने से पहले .update_idletasks() विधि (अनुभाग 26, “सार्वभौमिक विजेट विधियाँ” (पृष्ठ 97) देखें) को कॉल करना सुनिश्चित करें।

तो ठीक यही मैंने किया, लेकिन अब विंडो मैनेजर डेकोरेशन दिखाई देता है। अगर मैं w.update_idletasks() को कॉल नहीं करता तो यह ठीक काम करता है।

कोड:

w = tk.Toplevel(self.parent_frame)
w.geometry('48x240+1567+209')
w.update_idletasks()
w.overrideredirect(True)

मैं उबंटू 20.04.3 एलटीएस पर संस्करण 8.6.10 के साथ पायथन 3.8.10 का उपयोग कर रहा हूं।

0
Luka Banfi 14 अक्टूबर 2021, 12:48

1 उत्तर

सबसे बढ़िया उत्तर

यह आधिकारिक दस्तावेज नहीं है, और यह गलत है। ठीक इसके विपरीत सच है: tkinter के पास स्क्रीन पर विंडो खींचने का मौका होने से पहले आपको फ़्लैग सेट करना होगा। इसका मतलब है कि mainloop शुरू होने से पहले, और update या update_idletasks पर कॉल करने से पहले।

तर्क सरल है: overrideredirect सेट करना केवल एक ध्वज सेट करता है। जब खिड़की का प्रतिपादन किया जाता है, तो टिंकर यह देखने के लिए देखेगा कि ध्वज सेट है या नहीं और फिर खिड़की खींचें। यदि ध्वज सेट नहीं है, तो विंडो में एक बॉर्डर जोड़ा जाता है।

खिड़की के पहले ही खींचे जाने के बाद झंडा लगाने से कोई असर नहीं पड़ेगा क्योंकि सीमा पहले ही खींची जा चुकी होगी।

1
Bryan Oakley 14 अक्टूबर 2021, 17:21
चूंकि आधिकारिक पायथन प्रलेखन अनौपचारिक दस्तावेज़ीकरण के साथ उपरोक्त लिंक की गई वेबसाइट की ओर इशारा करता है, मैंने झूठा अनुमान लगाया कि यह आधिकारिक दस्तावेज था। अपने स्पष्टीकरण के लिए धन्यवाद। पी.एस. अतिरिक्त क्रेडिट अनुभाग के अंतर्गत आपका उल्लेख एक योगदानकर्ता के रूप में किया गया है। मैं स्टैक ओवरफ्लो पर आपके काम का बहुत बड़ा प्रशंसक हूं।
 – 
Luka Banfi
14 अक्टूबर 2021, 21:14