0

当我运行以下代码时,创建的标签出现在条目框的顶部,就好像它们没有被添加到同一个网格中一样。

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

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

4

1 回答 1

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(...)
...
于 2014-01-07T01:57:11.137 回答