python3 tkinter 网格和打包、内联打包语法和优雅
python3 tkinter grid and pack, inline packing syntax & elegance
打包框架 "in line" 与 ='ing 到一个变量并在下一行打包它有什么区别?
所以我看到了如何同时进行网格和打包 (see here),但是在尝试之后,我 运行 发现了一些奇怪的东西。如果您将第 16/17 行更改为:
f5 = Frame(mainF, bg = "yellow", height=100, width = 60)
f5.pack(side=BOTTOM,fill=NONE)
至:
f5 = Frame(mainF, bg = "yellow", height=100, width = 60).pack(side=BOTTOM,fill=NONE)
在代码的末尾,按钮被放入网格中的包中的框架中的框架中的框架中...我曾经没有错误的代码现在出现错误:
TclError: cannot use geometry manager grid inside .164287488 which already has slaves managed by pack
怎么样?哇-哈?为什么?
我的完整代码在这里:
from tkinter import Tk, Frame, Label, Entry, LEFT, TOP, YES, NONE, BOTH, RIGHT, BOTTOM,SE, Button,W,E,N,S
root = Tk()
mainF = Frame(root, bg = "green", height=100, width = 1060).pack(side=BOTTOM,fill=NONE)
f4 = Frame(mainF, bg = "blue", width = 300).pack(side=BOTTOM,fill=BOTH)
f = Frame(f4, bg = "orange", width = 500, height = 500).pack(side=LEFT, expand = 1)
f3 = Frame(f, bg = "red", width = 500)
f3.pack(side=LEFT, expand = 1, pady = 10, padx = 50)
f2 = Frame(f4, bg = "black", height=100, width = 100).pack(side=LEFT, fill = BOTH)
f5 = Frame(mainF, bg = "yellow", height=100, width = 60)
f5.pack(side=BOTTOM,fill=NONE)
#f7 = Frame(f5, bg = "green", height=100, width = 160).pack(side=BOTTOM,fill=BOTH)
#f6 = Frame(f7, bg = "green", height=100, width = 360).pack(side=BOTTOM,fill=BOTH)
b = Button(f2, text = "test")
b.pack()
Button(f3, text = "1").grid(row=0, column=0)
Button(f3, text = "2").grid(row=1, column=1)
Button(f3, text = "3").grid(row=2, column=2)
Button(f5, text = "1").grid(row=0, column=0)
Button(f5, text = "2").grid(row=1, column=1)
Button(f5, text = "3").grid(row=2, column=2)
root.mainloop()
我在 ipython 内使用 Spyder2 在 anaconda 内使用 64 在 python 内 3.4.1 64 在 Windows 内 7 64...
That many dreams within dreams is too unstable!
在第二个例子中:
f5 = Frame(mainF, bg = "yellow", height=100, width = 60).pack(side=BOTTOM,fill=NONE)
f5 是 None。这不是第一个例子中的情况:
f5 = Frame(mainF, bg = "yellow", height=100, width = 60)
f5.pack(side=BOTTOM,fill=NONE)
简而言之,不推荐"in line"方法。对于 python.
中的 tkinter 新用户来说,这是最常见的错误和头痛的原因之一
None
的原因很简单:pack()
和grid()
returnNone.
在您的完整代码示例中,mainF
、f4
、f
、f2
都是 None。因此,例如,您认为您正在将对 mainF
框架的引用作为主框架传递给 f4
,但实际上您正在传递 None
。
打包框架 "in line" 与 ='ing 到一个变量并在下一行打包它有什么区别?
所以我看到了如何同时进行网格和打包 (see here),但是在尝试之后,我 运行 发现了一些奇怪的东西。如果您将第 16/17 行更改为:
f5 = Frame(mainF, bg = "yellow", height=100, width = 60)
f5.pack(side=BOTTOM,fill=NONE)
至:
f5 = Frame(mainF, bg = "yellow", height=100, width = 60).pack(side=BOTTOM,fill=NONE)
在代码的末尾,按钮被放入网格中的包中的框架中的框架中的框架中...我曾经没有错误的代码现在出现错误:
TclError: cannot use geometry manager grid inside .164287488 which already has slaves managed by pack
怎么样?哇-哈?为什么?
我的完整代码在这里:
from tkinter import Tk, Frame, Label, Entry, LEFT, TOP, YES, NONE, BOTH, RIGHT, BOTTOM,SE, Button,W,E,N,S
root = Tk()
mainF = Frame(root, bg = "green", height=100, width = 1060).pack(side=BOTTOM,fill=NONE)
f4 = Frame(mainF, bg = "blue", width = 300).pack(side=BOTTOM,fill=BOTH)
f = Frame(f4, bg = "orange", width = 500, height = 500).pack(side=LEFT, expand = 1)
f3 = Frame(f, bg = "red", width = 500)
f3.pack(side=LEFT, expand = 1, pady = 10, padx = 50)
f2 = Frame(f4, bg = "black", height=100, width = 100).pack(side=LEFT, fill = BOTH)
f5 = Frame(mainF, bg = "yellow", height=100, width = 60)
f5.pack(side=BOTTOM,fill=NONE)
#f7 = Frame(f5, bg = "green", height=100, width = 160).pack(side=BOTTOM,fill=BOTH)
#f6 = Frame(f7, bg = "green", height=100, width = 360).pack(side=BOTTOM,fill=BOTH)
b = Button(f2, text = "test")
b.pack()
Button(f3, text = "1").grid(row=0, column=0)
Button(f3, text = "2").grid(row=1, column=1)
Button(f3, text = "3").grid(row=2, column=2)
Button(f5, text = "1").grid(row=0, column=0)
Button(f5, text = "2").grid(row=1, column=1)
Button(f5, text = "3").grid(row=2, column=2)
root.mainloop()
我在 ipython 内使用 Spyder2 在 anaconda 内使用 64 在 python 内 3.4.1 64 在 Windows 内 7 64...
That many dreams within dreams is too unstable!
在第二个例子中:
f5 = Frame(mainF, bg = "yellow", height=100, width = 60).pack(side=BOTTOM,fill=NONE)
f5 是 None。这不是第一个例子中的情况:
f5 = Frame(mainF, bg = "yellow", height=100, width = 60)
f5.pack(side=BOTTOM,fill=NONE)
简而言之,不推荐"in line"方法。对于 python.
中的 tkinter 新用户来说,这是最常见的错误和头痛的原因之一None
的原因很简单:pack()
和grid()
returnNone.
在您的完整代码示例中,mainF
、f4
、f
、f2
都是 None。因此,例如,您认为您正在将对 mainF
框架的引用作为主框架传递给 f4
,但实际上您正在传递 None
。