当我运行以下代码时,创建的标签显示在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()
我知道我可以在循环中添加这些框,但是,如果没有循环,我无法让它工作
答案 0 :(得分:2)
因此,因为标签和应用程序框架位于主窗口的同一行中,并且因为标签默认位于垂直中心,所以它们看起来位于条目窗口小部件的中间。
我假设您打算将标签作为框架的子项,因此您需要在创建它们时将“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(...)
...