Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72578
  • 博文数量: 26
  • 博客积分: 628
  • 博客等级: 中士
  • 技术积分: 315
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-22 11:57
文章分类

全部博文(26)

文章存档

2012年(4)

2011年(19)

2010年(3)

我的朋友

分类: Python/Ruby

2011-04-21 15:03:05


在前一个程序中, 我们看到两个按钮, 一个罗着一个. 但很可能, 我们却想让它们并肩在一块. 在这个程序中, 我们就会这么干, 顺便学一下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位置上, 而另一个则放在左边.

在一个容器中混合两个方向可不太好. 当你混合使用了两个方向, 那么最后的结果很可能是无法预期的, 而且很可能你调整一下容器大小, 样子就跟刚才完全不同.

所以比较好的经验是绝不在同一个控件中混合使用两种方向. 当你确实想用多个方向的操作来完成一个复杂的界面时, 最好还是在容器里再嵌一个容器. 我们在后面的程序中会再讨论这个主题.

*代码示例*

运行程序, 会看到俩按钮, 肩并肩站着.

  1. from Tkinter import *

  2. class MyApp:
  3.     def __init__(self, parent):
  4.         self.myContainer1 = Frame(parent)
  5.         self.myContainer1.pack()
  6.         
  7.         self.button1 = Button(self.myContainer1)
  8.         self.button1["text"]= "Hello, World!"
  9.         self.button1["background"] = "green"
  10.         self.button1.pack(side=LEFT)    ### (1)


  11.         self.button2 = Button(self.myContainer1)
  12.         self.button2.configure(text="Off to join the circus!")
  13.         self.button2.configure(background="tan")
  14.         self.button2.pack(side=LEFT)     ### (2)
  15.         

  16.         self.button3 = Button(self.myContainer1)
  17.         self.button3.configure(text="Join me?", background="cyan")
  18.         self.button3.pack(side=LEFT)     ### (3)
  19.             
  20.         self.button4 = Button(self.myContainer1, text="Goodbye!", background="red")
  21.         self.button4.pack(side=LEFT)     ### (4)
  22.     
  23.         
  24. root = Tk()
  25. myapp = MyApp(root)
  26. root.mainloop()
阅读(661) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~