2013-07-11 10 views
6

में सामग्री का आकार बदलता नहीं है मैं अपना पहला जीयूआई एप्लिकेशन बना रहा हूं और मैंने एक मूर्ख समस्या में भाग लिया है। मुख्य विंडो का आकार बदलना इसकी सामग्री का आकार बदलता नहीं है और खाली जगह छोड़ देता है। मैंने टीकेडॉक्स पढ़े हैं और वे केवल इतना कहते हैं कि आपको चिपचिपा और कॉलम/पंक्ति वजन विशेषताओं का उपयोग करना चाहिए, लेकिन मुझे वास्तव में समझ में नहीं आता कि वे कैसे काम करते हैं।विंडो का आकार बदलना tkinter

from tkinter import * 
from tkinter import ttk 

root = Tk() 

mainframe = ttk.Frame(root, padding="3 3 12 12") 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

player1 = StringVar() 
player2 = StringVar() 
player1.set('Player 1') 
player2.set('Player 1') 
timer=StringVar() 
running=BooleanVar() 
running.set(0) 
settimer = ttk.Entry(mainframe, width=7, textvariable=timer) 
settimer.grid(column=2, row=1, sticky=(N, S)) 
ttk.Button(mainframe, text="Start", command=start).grid(column=2, row=2, sticky=(N, S)) 

ttk.Label(mainframe, textvariable=player1, font=TimeFont).grid(column=1, row=3, sticky=(W, S)) 
ttk.Label(mainframe, textvariable=player2, font=TimeFont).grid(column=3, row=3, sticky=(E, S)) 

for child in mainframe.winfo_children(): 
    child.grid_configure(padx=80, pady=10) 

root.mainloop() 

अपने समय के लिए धन्यवाद: यहाँ (अगर आपको लगता है समस्या यहाँ नहीं है मैं इसे के बाकी पोस्ट करेंगे विगेट्स को कवर ही हिस्सा,) मेरे कोड है!

+0

प्रति [GCB] (http://stackoverflow.com/users/183132), आप पा सकते [जड़ खिड़की resizeable बनाना] (http://infohost.nmt.edu/tcc/help/pubs /tkinter/web/root-resize.html) एक उपयोगी संदर्भ होने के लिए। –

उत्तर

8

शायद यह आपको सही दिशा में मदद करेगा। प्रत्येक स्तर पर कॉलम/पंक्ति भार को कॉन्फ़िगर करना सुनिश्चित करें।

import tkinter.ttk 
from tkinter.constants import * 

class Application(tkinter.ttk.Frame): 

    @classmethod 
    def main(cls): 
     tkinter.NoDefaultRoot() 
     root = tkinter.Tk() 
     app = cls(root) 
     app.grid(sticky=NSEW) 
     root.grid_columnconfigure(0, weight=1) 
     root.grid_rowconfigure(0, weight=1) 
     root.resizable(True, False) 
     root.mainloop() 

    def __init__(self, root): 
     super().__init__(root) 
     self.create_variables() 
     self.create_widgets() 
     self.grid_widgets() 
     self.grid_columnconfigure(0, weight=1) 

    def create_variables(self): 
     self.player1 = tkinter.StringVar(self, 'Player 1') 
     self.player2 = tkinter.StringVar(self, 'Player 2') 
     self.timer = tkinter.StringVar(self) 
     self.running = tkinter.BooleanVar(self) 

    def create_widgets(self): 
     self.set_timer = tkinter.ttk.Entry(self, textvariable=self.timer) 
     self.start = tkinter.ttk.Button(self, text='Start', command=self.start) 
     self.display1 = tkinter.ttk.Label(self, textvariable=self.player1) 
     self.display2 = tkinter.ttk.Label(self, textvariable=self.player2) 

    def grid_widgets(self): 
     options = dict(sticky=NSEW, padx=3, pady=4) 
     self.set_timer.grid(column=0, row=0, **options) 
     self.start.grid(column=0, row=1, **options) 
     self.display1.grid(column=0, row=2, **options) 
     self.display2.grid(column=0, row=3, **options) 

    def start(self): 
     timer = self.timer.get() 
     self.player1.set(timer) 
     self.player2.set(timer) 

if __name__ == '__main__': 
    Application.main() 
+0

ठीक है, धन्यवाद, मुझे उम्मीद है कि मैं कक्षाओं का उपयोग करने से बच सकता हूं, वे मुझे डराते हैं। लेकिन मुझे लगता है कि सब कुछ के लिए पहली बार है ... – Dunno

+1

@ डुनो: यदि आपको कक्षाओं का उपयोग करके 'tkinter' अनुप्रयोगों के उदाहरणों की आवश्यकता है, तो मुझे बताएं। जब मैंने पहली बार जीयूआई लाइब्रेरी का उपयोग करना शुरू किया, तो मेरा कोड आपके जैसा ही था। अब जब भी मेरा कोड मेरे ध्यान में आता है, मेरा पहला विचार यह है कि कोड पूरी तरह से फिर से लिखा जाना चाहिए। –

+0

प्रस्ताव के लिए धन्यवाद, लेकिन इंटरनेट ऐसे उदाहरणों से भरा है, मैं अपना अधिक समय नहीं लेना चाहता हूं और इसके बजाय अपने google-fu का अभ्यास करना चाहता हूं;) – Dunno

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