在前一个程序中, 我们看到两个按钮, 一个罗着一个. 但很可能, 我们却想让它们并肩在一块. 在这个程序中, 我们就会这么干, 顺便学一下pack()的用法.
(1) (2) (3) (4)
pack是一种控制控件可视化方式的方法. 所以我们将用pack的"side"选项来将按钮并肩放在一起, 而不是一个罗着一个. 我们通过将side传入pack()来实现, 如下:
self.button1.pack(side=LEFT)
注意LEFT(还有RIGHT, TOP, BOTTON)是tkinter中定义的一个可读性非常好的常量. "LEFT"实际上是"Tkinter.LEFT" -- 但因为我们导入了Tkinter, 所以我们就不用加"Tkinter."前缀了.
*为啥上个程序按钮们会玩叠罗汉哩*
你应该记得, 上个程序中, 我们pack按钮时, 并没有指定"side"选项, 然后按钮们就成那个熊样了. 这是因为"side"的默认值是"side=TOP".
所以当我们pack button1时, 它是被塞到myContainer1内部的顶部的. 然后myContainer1剩余的空间就全部在button1下面了. 然后再pack button2. 它被塞到剩下的空间的顶部, 然后再剩余的空间又全部位于button2的下面.
如果我们按另一个顺序来pack按钮 -- 比如, 假如我们先pack button2, 再pack button1, 那么button2就会呆在最上面.
明白了? 去控制你的界面长啥样的一种方法就是按顺序的把控件塞到容器里.
*再来个术语 -- 方向*
"Vertical"方向包括上边和下边.
"Horizonal"方向包括左边和右边.
当你pack控件或容器时, 它有可能会混合两个方向. 比如, 我们会把一个按钮放在TOP位置上, 而另一个则放在左边.
在一个容器中混合两个方向可不太好. 当你混合使用了两个方向, 那么最后的结果很可能是无法预期的, 而且很可能你调整一下容器大小, 样子就跟刚才完全不同.
所以比较好的经验是绝不在同一个控件中混合使用两种方向. 当你确实想用多个方向的操作来完成一个复杂的界面时, 最好还是在容器里再嵌一个容器. 我们在后面的程序中会再讨论这个主题.
*代码示例*
运行程序, 会看到俩按钮, 肩并肩站着.
- from Tkinter import *
-
-
class MyApp:
-
def __init__(self, parent):
-
self.myContainer1 = Frame(parent)
-
self.myContainer1.pack()
-
-
self.button1 = Button(self.myContainer1)
-
self.button1["text"]= "Hello, World!"
-
self.button1["background"] = "green"
-
self.button1.pack(side=LEFT) ### (1)
-
-
-
self.button2 = Button(self.myContainer1)
-
self.button2.configure(text="Off to join the circus!")
-
self.button2.configure(background="tan")
-
self.button2.pack(side=LEFT) ### (2)
-
-
-
self.button3 = Button(self.myContainer1)
-
self.button3.configure(text="Join me?", background="cyan")
-
self.button3.pack(side=LEFT) ### (3)
-
-
self.button4 = Button(self.myContainer1, text="Goodbye!", background="red")
-
self.button4.pack(side=LEFT) ### (4)
-
-
-
root = Tk()
-
myapp = MyApp(root)
-
root.mainloop()
阅读(654) | 评论(0) | 转发(0) |