2013-07-11 46 views
6

私は最初のGUIアプリケーションを作成していますが、私は愚かな問題に遭遇しました。メインウィンドウのサイズを変更しても、内容のサイズは変更されず、空白が残ります。私はTKDocsを読んできましたが、スティッキーと列/行の重み付け属性を使用する必要があるとしか言いませんが、実際の動作の仕方は分かりません。 はここ(あなたは問題がここではないと思われる場合、私はそれの残りの部分を投稿します、ウィジェットをカバーする部分のみ)私のコードです:お時間をサイズ変更ウィンドウで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)、あなたは([ルートウィンドウはサイズ変更を作る]を見つけることが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

@Dunno:クラスを使って 'tkinter'アプリケーションの例が必要な場合は、教えてください。 GUIライブラリを初めて使用したとき、私のコードはあなたのものと似ていました。今、そのようなコードが私の注意を引くと、私の最初の考えは、コードを完全に書き直す必要があるということです。 –

+0

申し出てくれてありがとうございますが、インターネットはそのような例がいっぱいです。時間をかけすぎず、代わりにGoogle-fuを実践したくありません。 – Dunno

関連する問題