Tkinter小部件成为堆叠的

时间:2012-03-18 02:52:32

标签: python user-interface grid tkinter

我在Tkinter(使用Python 2.5.1)中看到的问题是,当我使用grid()方法添加元素时,它们堆叠在一起而不是创建一个新行。代码将运行,但小部件全部堆叠在应用程序中心的两行中。为什么会这样?

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()

1 个答案:

答案 0 :(得分:2)

首先,您某些此代码是否适合您?我在两行中两次使用sticky选项时遇到错误。但是,这不是问题所在。

您认为发生的事情并不是实际发生的事情。小部件不是全部​​"堆叠在一起:两个是不可见的,因为你没有在它们上面调用grid方法,并且只有标题堆叠在另一个小部件之上,因为这是你放置它的地方。

问题是您拨打self.lblTitle.grid(...)三次。毫无疑问,这三次中有两次打算在其他小部件上调用grid方法。