Python-为什么不建议使用多个Tk实例?

考虑以下示例:

import tkinter as tk

root = tk.Tk()

root.title("root")

other_window = tk.Tk()

other_window.title("other_window")

root.mainloop()

并且还请参见下面的示例,该示例创建了Tk背对背的实例,而不是一次创建,因此在任何给定时间都只有一个实例Tk:

import tkinter as tk

def create_window(window_to_be_closed=None):

if window_to_be_closed:

window_to_be_closed.destroy()

window = tk.Tk()

tk.Button(window, text="Quit", command=lambda arg=window : create_window(arg)).pack()

window.mainloop()

create_window()

为什么拥有多个实例被认为是不好的Tk?

第二个代码段是否被认为更好一些,还是遇到了与第一个代码相同的条件?

回答:

为什么拥有多个实例被认为是不好的Tk?

Tkinter只是围绕导入Tk库的嵌入式Tcl解释器的python包装器。创建根窗口时,将创建Tcl解释器的实例。

每个Tcl解释器都是一个隔离的沙箱。一个沙箱中的对象无法与另一个沙箱中的对象进行交互。最常见的表现是StringVar在一个解释器中创建的在另一个解释器中不可见。窗口小部件也是如此-您不能在一个解释器中创建窗口小部件,而在另一个解释器中将其作为父窗口小部件。

从技术角度来看,没有理由不能同时拥有两个实例Tk。对此的建议是因为实际上很少需要两个或多个不同的Tcl解释器,并且它会引起初学者难以理解的问题。

第二个代码段是否被认为更好一些,还是遇到了与第一个代码相同的条件?

在不知道您要达到的目标的情况下,不可能说出问题中的第二个例子是否更好。可能再好不过了,因为您再一次很少实际需要两个实例。

最好的解决方案是99.9%的时间是为Tk程序的整个生命周期创建一个实例。很简单,这就是设计使用tkinter和底层Tcl / Tk解释器的方式。

以上是 Python-为什么不建议使用多个Tk实例? 的全部内容, 来源链接: utcz.com/qa/424787.html

回到顶部