2012-03-18 13 views
0

Tkinter(Python 2.5.1を使用)で見ている問題は、grid()メソッドを使って要素を追加すると、新しい行を作成するのではなく、互いの上にスタックするということです。コードは実行されますが、ウィジェットはすべてアプリケーションの中央に2行積み重ねられます。なぜこうなった?Tkinterウィジェットがスタックになる

from Tkinter import * 

import random 

class Application(Frame): 
    """Define Application's constructor""" 
    def __init__(self, master): 
     """Initialize the Frame""" 
     Frame.__init__(self, master) 
     self.grid() 
     self.create_widgets() 


    #Create the widgets 
    def create_widgets(self): 
     self.lblTitle = Label(self, text="Build Your Own Burger") 
     self.lblTitle.grid(row=0) 

     self.lblBurgerImg = Label(self, image=PhotoImage(file="burger.gif")) 
     self.lblTitle.grid(row=1) 

     self.lblName = Label(self, text="Name:") 
     self.lblName.grid(row=2, column=0, columnspan=2, sticky=W) 

     self.entryName = Entry(self) 
     self.entryName.grid(row=2, column=1, columnspan=2, sticky=W) 

     self.lblToppings = Label(self, text = "Toppings:") 
     self.lblTitle.grid(row=3, column=0, sticky=W, columnspan=5, sticky=W) 

     self.chkCheese = Checkbutton(self, text="cheese") 
     self.chkCheese.grid(row=3, column=1, sticky=W, columnspan=5, sticky=W) 


#main program 

#create a root window 
root = Tk() 

#assign a title for the GUI 
root.title("Order Up!") 

#Define size of root window 
root.geometry("700x700") 

#create an instance of your application 
app = Application(root) 

#start the event loop 
root.mainloop() 

答えて

2

まず第一に、あなたは、このコードはあなたのために働く特定ですか?私は二重線の上でstickyオプションを2回使用することについてエラーを受け取ります。しかしそれは問題ではない。

あなたが考えていることは、実際に起こっていることではありません。ウィジェットはお互いの上に積み重ねられているわけではありません。あなたはgridメソッドを呼び出さないので、2つのウィジェットは表示されず、他のウィジェットの上に積み重なるタイトルだけです。それを置く。

問題は、self.lblTitle.grid(...)を3回呼び出すことです。これらのうち2つのうち、他のウィジェットのgridメソッドを呼び出すことは間違いありませんでした。

+0

うわー、私はそれをキャッチしていないと信じられない。ありがとう、ブライアン!それを修正した後、私は今、私のバーガーイメージがあるはずの空白のスペースを見ています。 Pythonスクリプトと同じディレクトリにある.gifファイルです。正しく表示させるためにコードを追加する必要がありますか? – KongMD

+0

私は、画像を別々に宣言し、幅と高さの属性を追加するだけでした。再度、感謝します :) – KongMD

関連する問題