2025, Oct 22 10:16
customtkinter: CTkTabview विंडो की ऊंचाई नहीं भरता? anchor='s' से ठीक करें
customtkinter में CTkTabview विंडो की ऊंचाई का हिस्सा खाली छोड़ देता है? कारण और समाधान: grid सही होने पर भी कंटेंट नहीं फैलता; anchor='s' से समस्या ठीक करें.
customtkinter में CTkTabview ऊर्ध्वाधर स्थान क्यों नहीं भरता और इसे कैसे ठीक करें
कभी‑कभी CTkTabview ऐसा लगता है जैसे वह विंडो की ऊंचाई का केवल दो‑तिहाई हिस्सा ले रहा हो, और नीचे बड़ा खाली भाग छूट जाता है। Grid को फैलने के लिए कॉन्फ़िगर किया गया है, sticky में nsew दिया है, फिर भी सामग्री पूरा ऊर्ध्वाधर स्थान नहीं भरती। आइए एक न्यूनतम उदाहरण, वजह, और समाधान देखते हैं।
पुनरुत्पादनीय स्निपेट
import customtkinter
class MainWindow(customtkinter.CTk):
    def __init__(self):
        super().__init__()
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)
        self.tabs = TabBook(self)
        self.tabs.grid(column=0, row=0, sticky="nsew")
class TabBook(customtkinter.CTkTabview):
    def __init__(self, master):
        super().__init__(master)
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)
        self.add("Tab")
        self.tab("Tab").grid_columnconfigure(0, weight=1)
        self.tab("Tab").grid_rowconfigure(0, weight=1)
        self.tab("Tab").grid(column=0, row=0, sticky="nsew")
वास्तव में होता क्या है
यह customtkinter में एक बग जैसा व्यवहार है। CTkTabview ऑब्जेक्ट स्वयं विंडो को अपेक्षा के अनुसार भरने के लिए फैल जाता है, लेकिन उसके भीतर का कंटेंट‑एरिया विजेट के केवल ऊपरी हिस्से तक सीमित रहता है। बाकी स्थान खाली छूट जाता है। इसे परखने के लिए टैब के अंदर कोई दिखाई देने वाला विजेट रखें—वह ऊपर चिपका रहेगा, जबकि नीचे का भाग खाली रहेगा।
समाधान
CTkTabview को anchor="s" के साथ प्रारंभ करें। anchor="s" देने पर विजेट सही तरह बर्ताव करता है और टैब का कंटेंट उपलब्ध ऊर्ध्वाधर स्थान का इच्छित रूप से उपयोग करता है।
import customtkinter
class MainWindow(customtkinter.CTk):
    def __init__(self):
        super().__init__()
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)
        self.tabs = TabBook(self)
        self.tabs.grid(column=0, row=0, sticky="nsew")
class TabBook(customtkinter.CTkTabview):
    def __init__(self, master):
        super().__init__(master, anchor='s')
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)
        self.add("Tab")
        self.tab("Tab").grid_columnconfigure(0, weight=1)
        self.tab("Tab").grid_rowconfigure(0, weight=1)
        self.tab("Tab").grid(column=0, row=0, sticky="nsew")
यह क्यों मायने रखता है
जब लेआउट गलत दिखे तो शक अक्सर grid वेट, sticky फ्लैग्स या कंटेनर साइजिंग पर जाता है। इस मामले में ये सब पहले से सही हैं; समस्या CTkTabview के अंदर है। यह समझना कि विजेट पैरेंट को तो भर रहा है, पर उसका कंटेंट‑एरिया नहीं—आपको अपने कोड में काल्पनिक grid बग्स के पीछे भागने से बचाता है।
CustomTkinter रिपॉज़िटरी में इस व्यवहार पर एक ओपन इश्यू ट्रैक हो रहा है: github.com/TomSchimansky/CustomTkinter/issues/2739
निष्कर्ष
यदि आपका CTkTabview विंडो के ऊपरी हिस्से तक ही सीमित दिखता है, तो grid और sticky की सेटिंग्स उसी तरह रहने दें और CTkTabview बनाते समय anchor="s" सेट करें। जब तक अपस्ट्रीम बग ठीक नहीं होता, यह बदलाव टैब की सामग्री को उपलब्ध जगह के अनुरूप रखता है और अपेक्षित फुल‑हाइट लेआउट लौटा देता है।