- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑下面的例子:
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/
我认为允许在 Haskell 中进行任意链式比较会很好,因此您可以进行简单的范围检查,例如: x ), (>=), (==), (/=)) class Booly v a where truthy
(请注意,当我说“JVM”时,我的意思是“热点”,我正在运行最新的 Java 1.6 更新。) 示例情况: 我的 JVM 运行时 -Xmx 设置为 1gb。目前,堆分配了 500mb,其中 450mb
我试图利用 上的崩溃安全漏洞Ubuntu 16.04 ,带有未修补的 内核 4.8.0-36 在 英特尔酷睿-i5 4300M 中央处理器。 首先,我使用内核模块将 secret 数据存储在内核空间中
假设我想在 do 中 fork 一个线程-notation block ,但我不关心线程ID。如果我写 forkIO action GHC 发出警告 Warning: A do-notation st
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我正在用 Java 探索一棵树,但我的内存有限。我通过查看占用统计数据来处理这个问题,当我超过 80%(比如说)时,停止分配树的新位以避免内存不足。只需使用我到目前为止所得到的 20% 净空进行计算即
我是一名优秀的程序员,十分优秀!