[英]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.