[英]Python tkinter Label
嗨,我有一個關於 tkinter 中的標簽的小問題。
當您在類外使用 Label 時,您會執行類似的操作
import tkinter as tk
root = tk.Tk()
label = tk.Label(root, text = "something", background = "something")
label.pack()
但是,當它在類中並且代碼類似於
將 tkinter 作為 tk 導入
class Example(tk.Frame):
COLOURS = [ "#f45", "#ee5", "#aa4", "#a1e433", "#e34412", "#116611",
"#111 eeefff", "#3aa922191", "#abbabbaaa" ]
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.parent = parent
col = 1
for colour in Example.COLOURS:
#
label = tk.Label(self, text=colour, background=colour)
#
label.grid(row=1, column=col)
col += 1
def main():
root = tk.Tk()
ex = Example(root)
root.geometry("+300+300")
root.mainloop()
if __name__ == '__main__':
main()
但不應該更像
label = tk.Label(self.parent, text=colour, background=colour)
因為 self.parent 會對應於 root? 當我嘗試這樣做時,我收到一個錯誤,並且只有當我在它下面有 label.grid(...) 行時才會這樣做(我試過 pack 並且它工作正常)。
所以我認為這段代碼
import tkinter as tk
root = tk.Tk()
label = tk.Label(root)
label.grid(row=0, column=0)
root.mainloop()
也不會工作,但它實際上工作得很好。 所以我很困惑。 誰能解釋一下?
不,它不應該是self.parent
。
在您給出的類示例中,類本身就是一個框架。 以這種方式設計使示例自包含。 通過從Frame
繼承,您可以獲取該類中的所有代碼並將其放在 GUI 中的任何位置。 您可以將類及其中的所有內容視為單個自定義小部件。 您可以擁有多個這樣的類,並且每個類都可以被視為一個 GUI 對象。
為了實現這一點,該類只將小部件放在自身內部,而不是在其父類中。
使用Frame
的子類的全部目的是充當其他小部件的容器。 如果您不打算將其用作其他小部件的容器,那么從Frame
繼承就沒有意義了。
它相當於這個,沒有類:
import tkinter as tk
root = tk.Tk()
frame = tk.Frame(root)
frame.pack(...)
label = tk.Label(frame, text = "something", background = "something")
label.pack(...)
如果您希望類將小部件放在父類中,您可以像下面這樣定義類。 請注意,它繼承自object
而不是Frame
:
class Example(object):
def __init__(self, parent):
self.parent = parent
...
label = tk.Label(parent, ...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.