2016-02-02 11 views
5

पेज फ्रेम में, मैंने आंतरिक फ्रेम के अंदर दो फ्रेम भारित किए हैं ताकि वे प्रत्येक स्क्रीन का आधा हिस्सा ले सकें, हालांकि, जब मैं इनमें से किसी एक फ्रेम में विजेट जोड़ता हूं, तो मैंने एक सूची के रूप में एक सूची बॉक्स का उपयोग किया है बड़ा है, फ्रेम में से एक अब दूसरे से अधिक लेता है। मैं इसे कैसे बना सकता हूं ताकि विजेट जोड़े जाने पर आकार बदल न जाए और प्रत्येक खिड़की के आधे आकार के बने रहे?tkinter - विजेट जोड़े जाने पर फ्रेम बदलने वाले आकार को कैसे रोकें?

import tkinter as tk 
from tkinter import ttk 

class Program(tk.Tk):   
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 

     tk.Tk.iconbitmap(self, default = "") 
     tk.Tk.wm_title(self, "") 

     container = tk.Frame(self) 
     container.pack(side="top", fill="both", expand=True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 

     self.frames = {} 
     for F in (Page, Other): 

      frame = F(container, self) 
      self.frames[F] = frame 
      frame.grid(row = 0, column = 0, sticky = "nsew") 

     self.show_frame(Page) 

    def show_frame(self,cont): 
     frame = self.frames[cont] 
     frame.tkraise() 


class Page(tk.Frame): 

    def __init__(self, parent, controller): 


     tk.Frame.__init__(self, parent) 

     innerFrame = tk.Frame(self, bg="red") 
     innerFrame.place(relx=.5, rely=.5, anchor="c", relwidth=1.0, relheight=1.0) 


     innerFrame.grid_rowconfigure(0, weight=1) 
     innerFrame.grid_rowconfigure(1, weight=1) 
     innerFrame.grid_columnconfigure(0, weight=1) 

     #First Half 
     frameOne = tk.Frame(innerFrame, bg="pink") 
     frameOne.grid(row=0, sticky="NSWE") 

     #Second Half 
     frameTwo = tk.Frame(innerFrame, bg="green") 
     frameTwo.grid(row=1, sticky="NSWE") 

     lb = tk.Listbox(frameTwo) 
     lb.pack(fill="both", expand=True) 


class Other(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 



app = Program() 
app.state('zoomed') 
app.mainloop() 
+0

सुनिश्चित नहीं हैं कि आप एक ही विजेट पर पैक, जगह और ग्रिड मिश्रण किया जाना चाहिए। 'आंतरिक फ्रेम' पर आप इसे पहले रखें, फिर ग्रिड कॉन्फ़िगरेशन का उपयोग करें। मैंने आमतौर पर ग्रिड का उपयोग किया है, लेकिन शायद स्थान और पैक का उपयोग करने में अनुभव वाला कोई व्यक्ति विस्तृत कर सकता है। –

उत्तर

4

ग्रिड पैरामीटर uniform है, जो एक मनमाना मूल्य लेता स्वीकार करता है:

Without Listbox

With Listbox

यहाँ मेरी कोड है। एक ही मूल्य के साथ सभी पंक्तियों (या सभी कॉलम) को "वर्दी समूह" का हिस्सा माना जाता है। यह पंक्तियों (या कॉलम) को उनके वजन के अनुपात में एक समान आकार के लिए मजबूर करता है।

यदि आपके पास फ्रेम में दो पंक्तियां हैं, तो दोनों पंक्तियों का एक समान वजन होता है, और दोनों एक समान वर्दी समूह से संबंधित होते हैं, वे प्रत्येक उपलब्ध स्थान का बिल्कुल 50% ले लेंगे। (, जब तक यह दोनों पंक्तियों के लिए एक ही मूल्य के रूप में किसी भी मूल्य में यह किया जा सकता है फिर से, "x" मनमाना है)

innerFrame.grid_rowconfigure(0, weight=1, uniform="x") 
innerFrame.grid_rowconfigure(1, weight=1, uniform="x") 

:

अपने मामले में आप यह कर सकते हैं टी के लिए आधिकारिक दस्तावेज (जिस पर tkinter बनाया गया है) इस तरह यह वर्णन (http://tcl.tk/man/tcl8.5/TkCmd/grid.htm#M24 देख)

-uniform विकल्प, जब एक गैर-रिक्त मान आपूर्ति की जाती है, अन्य पंक्तियों के साथ एक समान समूह में पंक्ति देता है कि है समान के लिए एक ही मूल्य। एक समान समूह से संबंधित पंक्तियों के लिए स्थान आवंटित किया जाता है ताकि उनके आकार हमेशा उनके वजन के मूल्यों के सख्त अनुपात में हों।

...

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


नोट: uniform विकल्प tkinter दस्तावेज में दिखाई नहीं देता, लेकिन यह एक पूरी तरह से वैध विकल्प है। यह कई वर्षों से टीके (जिस पर टिंकर बनाया गया है) का हिस्सा रहा है।

1

आप फ्रेम करने के लिए एक max-size, min-sixe उपयोग कर सकते हैं:

master = tk() 
master.minsize(width=777, height=777) 
master.maxsize(width=777, height=777) 
संबंधित मुद्दे