簡體   English   中英

標簽出現在Tkinter的Entry's上

[英]Labels appearing over Entry's in 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_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列。 當您沒有指定任何內容時,這是默認值。 同樣作為默認值,它們出現在中間
  • 此框架有四個分布在兩行中的條目小部件,使框架增長以適應這些條目小部件
  • “間隔名稱”標簽也放在主窗口的第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(...)
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM