【问题标题】:Same results with "root" and "master", when using tkinter. Then, when to use each one?使用 tkinter 时,“root”和“master”的结果相同。那么,什么时候使用每一个呢?
【发布时间】:2019-03-14 18:03:05
【问题描述】:

我正在与 Tkinter 合作制作用户界面。 我不明白“master”和“root”之间的区别。

我在这里找到了一些信息:Python interface to Tcl/Tk¶

要访问包含给定窗口小部件的顶级窗口,您通常只需引用该窗口小部件的主窗口即可。当然,如果小部件已被打包在框架内,则主窗口不会代表顶层窗口。要访问包含任意小部件的顶层窗口,您可以调用 _root() 方法。此方法以下划线开头,表示此函数是实现的一部分,而不是 Tk 功能的接口。

但我还是不明白。所以我做了一些代码,但我看不出得到的结果有什么不同(***)。

使用“大师”

from tkinter import *
master = Tk()   ***
Canvas = Canvas(master)   ***
Canvas.pack()

def create_circle(x, y, r, canvas): 
    x0 = x - r
    y0 = y - r
    x1 = x + r
    y1 = y + r
    return canvas.create_oval(x0, y0, x1, y1)

create_circle(100, 100, 20, Canvas)
master.mainloop()   ***

使用“根”

from tkinter import *
root = Tk()   ***
Canvas = Canvas(root)   ***
Canvas.pack()

def create_circle(x, y, r, canvas): 
    x0 = x - r
    y0 = y - r
    x1 = x + r
    y1 = y + r
    return canvas.create_oval(x0, y0, x1, y1)

create_circle(100, 100, 20, Canvas)
root.mainloop()   ***

【问题讨论】:

  • master 似乎只是当前小部件的父级,而 root 是根小部件。如果您当前的小部件在三者中很深,那么master和root会有所不同。
  • 啊,在您的代码中,您使用变量名master 来指代根小部件,因此会造成混淆。每个小部件都有一个 master 属性,它将为您提供其父级。当你在树的深处有一个时,它的父级将不是根小部件。

标签: python tkinter


【解决方案1】:

我正在与 Tkinter 合作制作用户界面。我不明白“master”和“root”之间的区别。

没有区别。它只是一个名字,你可以随心所欲地称呼它。

由于 tkinter 小部件存在于以单个小部件为根的树中,root 是该小部件的正式名称。因此,root 已成为用于访问此小部件的变量的最常用名称。但是,你可以随意给它起任何你想要的名字,因为这个名字只是为了你方便。 Tkinter 不在乎你怎么称呼它。

Tkinter 文档有时也指主人和奴隶,有时也指父母和孩子。除根窗口外,所有小部件都有一个主窗口(或父窗口)。该术语主要用于几何管理器packplacegrid 的上下文中,作为描述如何将一个小部件放入另一个小部件的一种方式。

【讨论】:

  • 还有一个名为._root() 的内部(但非常有用)函数,它会找到当前小部件的主人,直到它到达最顶端。如果您有多个带有tkinterthreading 的窗口(虽然不是嗯......更可取),这很有用。
【解决方案2】:

我会小心使用master,见下文;)

这里是整个故事....https://mail.python.org/pipermail/tutor/2010-June/076444.html

from tkinter import *
root = Tk()

Canvas = Canvas(root)

print(dir(Canvas.master))

Canvas.pack()

def create_circle(x, y, r, canvas): 
     x0 = x - r
     y0 = y - r
     x1 = x + r
     y1 = y + r
     return canvas.create_oval(x0, y0, x1, y1)

create_circle(100, 100, 20, Canvas)

root.mainloop()

【讨论】:

    猜你喜欢
    • 2014-09-23
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    相关资源
    最近更新 更多