Python 出现在入口上方的标签';他在特金特

Python 出现在入口上方的标签';他在特金特,python,tkinter,label,tkinter-entry,Python,Tkinter,Label,Tkinter Entry,当我运行以下代码时,创建的标签会显示在输入框的顶部,就好像它们没有添加到同一个网格中一样 class Application(Frame): def __init__(self,master): super(Application,self).__init__(master) self.grid() self.new_intervals() def new_intervals(self): self.int_lab

当我运行以下代码时,创建的标签会显示在输入框的顶部,就好像它们没有添加到同一个网格中一样

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() 
我知道我可以将这些框添加到循环中,但是,如果没有循环,我目前无法使其工作

  • 应用程序框架位于主窗口的第0行第0列。这是您不指定任何内容时的默认设置。作为默认值,它们出现在中间
  • 中。
  • 这个框架有四个条目小部件,分布在两行上,使框架增长以适应这些条目小部件
  • “Interval Name”标签也被放置在主窗口的第0行第0列中,因为这是您明确告诉它要做的,并且它的父窗口是主窗口
  • “时间”标签也位于主窗口的第0行,因为它的父窗口也是主窗口
  • 这两个标签都显示在行的垂直中心,因为这是您尚未覆盖的默认行为,这就是它们显示在条目小部件顶部的原因

这样,因为标签和应用程序框位于主窗口的同一行中,并且因为标签默认位于垂直中心,所以它们似乎处于入口小部件的中间。p> 我假设您打算将标签作为框架的子项,因此在创建标签时需要将“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(...)
...