TkInter中小部件的.pack和.configure之间的区别?

时间:2012-01-03 01:35:23

标签: python methods tkinter

我正在研究一个文本,尝试更多地了解TkInter,因为我正在努力改进我的Python 3编程。如有必要,可在此处找到该文字:http://www.ferg.org/thinking_in_tkinter/all_programs.html

在标有“tt040.py”的部分中有一个示例代码,其中一部分是:

    self.button1 = Button(self.myContainer1)
    self.button1["text"] = "Hello, World!"   ### (1)
    self.button1["background"] = "green"     ### (1)
    self.button1.pack()


    self.button2 = Button(self.myContainer1)
    self.button2.configure(text="Off to join the circus!") ### (2)
    self.button2.configure(background="tan")               ### (2)
    self.button2.pack()


    self.button3 = Button(self.myContainer1)
    self.button3.configure(text="Join me?", background="cyan")  ### (3)
    self.button3.pack()

这部分代码的解释是:

“(2)对于button2,该过程与button1基本相同,但我们使用按钮的内置”configure“方法,而不是访问按钮的字典。

(3)对于button3,我们看到configure方法可以使用多个关键字参数,因此我们可以在一个语句中设置多个选项。“

解释实际上意味着什么?同样,.configure方法的实际差异(.pack)或需要是什么? “按钮的字典”是什么意思?

2 个答案:

答案 0 :(得分:2)

每个小部件都有一个属性字典(textbackground,...)。您可以使用常规字典语法访问它,如self.button1["text"] = "Hello, World!"或使用您在其他示例中看到的configure方法。这只是为了设置小部件的外观和行为。

完成后,您现在调用pack让Tkinter准备好使用小部件。然后它会显示等等。

您可以通过在解释器中逐步执行Tkinter命令来看到这一点,如下所示:

>>> from Tkinter import *
>>> root = Tk()
>>> bt = Button(root)
>>> bt['text'] = 'hello'
>>> bt.pack()

答案 1 :(得分:1)

Tkinter对象属性不是通过python属性机制处理的(即你可以 self.button1.text = "hello" )。相反,tkinter提供了两种方法来改变这个属性:

  • 将该对象用作词典:self.button1["text"] = "hello"
  • config方法与命名参数self.button1.config(text="hello")
  • 一起使用

两者都是等价的。请注意,您也可以通过构造函数命名参数传递此初始化值,以便在一个步骤中执行初始化:self.button1 = Button(self.myContainer1, text="hello")

pack用于完全不同的目的。它是一种几何管理指令。在没有参数button1.pack()的情况下使用请求将button1放在其先前兄弟(如果有)之下的父窗口小部件中。您可以使用options指定相对位置或调整行为大小。

tkinter还有其他几何管理器:网格和位置,请参阅this response进行比较。