gpt4 book ai didi

python - 为什么不鼓励使用多个 Tk 实例?

转载 作者:太空狗 更新时间:2023-10-30 01:53:00 28 4
gpt4 key购买 nike

考虑下面的例子:

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 实例被认为是不好的?
  • 第二个片段是否被认为更好一点,或者它是否受到影响第一个代码的条件相同吗?

最佳答案

Why is it considered bad to have multiple instances of Tk?

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

每个 Tcl 解释器都是一个独立的沙箱。一个沙箱中的对象不能与另一个沙箱中的对象交互。最常见的表现是在一个解释器中创建的 StringVar 在另一个解释器中不可见。小部件也是如此——您不能在一个解释器中创建小部件,而在另一个解释器中将其作为父小部件。图像是第三种情况:在一种情况下创建的图像不能在另一种情况下使用。

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

Is the second snippet considered a bit better, or does it suffer from the same conditions the first code does?

如果不知道您要实现的目标,就不可能说问题中的第二个示例是否更好。这可能也好不到哪里去,因为再说一次,您很少会真正需要两个实例。

在 99.9% 的情况下,最好的解决方案是只创建一个 Tk 实例,供您在程序的整个生命周期中使用。如果您需要第二个或后续窗口,请创建 Toplevel 的实例。很简单,这就是 tkinter 和底层 Tcl/Tk 解释器的设计用途。

关于python - 为什么不鼓励使用多个 Tk 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48045401/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com