标签出现在Tkinter的Entry's上

时间:2014-01-07 01:26:46

标签: python tkinter label tkinter-entry

当我运行以下代码时,创建的标签显示在Entry框的顶部,就像它们没有被添加到同一网格一样。

class Application(Frame):
    def __init__(self,master):
        super(Application,self).__init__(master)
        self.grid()
        self.new_intervals()

    def new_intervals(self):
        self.int_label = Label(text="Interval Name")
        self.int_label.grid(row=0, column=0,sticky=W)
        self.int_time_label = Label(text="Time (HH:MM:SS)")
        self.int_time_label.grid(row=0, column=1,sticky=W)
        self.box1 = Entry(self)
        self.box1.grid(row=1,column=0,sticky=W)
        self.box2 = Entry(self)
        self.box2.grid(row=1,column=1,sticky=W)
        self.box3 = Entry(self)
        self.box3.grid(row=2,column=0,sticky=W)
        self.box4 = Entry(self)
        self.box4.grid(row=2,column=1,sticky=W)


root = Tk()
root.title("Interval Timer")
root.geometry("400x500")
app=Application(root)
root.mainloop() 

我知道我可以在循环中添加这些框,但是,如果没有循环,我无法让它工作

1 个答案:

答案 0 :(得分:2)

  • 应用程序框架位于主窗口的第0行第0列。当您没有指定任何内容时,这是默认值。另外,默认情况下,它们显示在中间
  • 此框架有四个分布在两行的条目小部件,使框架增长以适应这些条目小部件
  • “间隔名称”标签也放在主窗口的第0行第0列,因为这是您明确告诉它要做的事情,因为它的父窗口是主窗口。
  • “时间”标签也位于主窗口的第0行,因为它的父窗口也是主窗口
  • 这两个标签都出现在行的垂直中心,因为这是您没有覆盖的默认行为,这就是它们出现在条目小部件顶部的原因。

因此,因为标签和应用程序框架位于主窗口的同一行中,并且因为标签默认位于垂直中心,所以它们看起来位于条目窗口小部件的中间。

我假设您打算将标签作为框架的子项,因此您需要在创建它们时将“self”指定为第一个参数:

self.int_label = Label(self, text="Interval Name")
...
self.int_time_label = Label(self, text="Time (HH:MM:SS)")

我还建议将特定主窗口的所有网格语句分组在一起,这样就可以更轻松地查看窗口小部件的组织。根据我的经验,这使代码更易于阅读和维护。

例如:

self.int_label = Label(...)
self.int_time_label = Label(...)
self.box1 = Entry(...)
...
self.int_label.grid(...)
self.int_time_label.grid(...)
self.box1.grid(...)
...