TkInter中.pack和.configure的区别是什么?

4 投票
2 回答
16528 浏览
提问于 2025-04-17 09:25

我现在正在学习一段文本,想要自己更好地了解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方法可以接受多个关键字参数,所以我们可以在一条语句中设置多个选项。”

这段解释到底是什么意思呢?也就是说,.pack和.configure方法之间有什么实际的区别或者需要?“按钮的字典”又是什么意思呢?

2 个回答

2

每个小部件都有一个属性字典,比如 text(文本)、background(背景)等等。你可以用普通的字典语法来访问这些属性,比如 self.button1["text"] = "Hello, World!",或者使用 configure 方法,这在其他例子中也有提到。这些都是为了设置小部件的外观和行为。

当你设置完成后,调用 pack 来告诉 Tkinter 这个小部件已经准备好了。然后它就会被显示出来,等等。

你可以通过在解释器中一步一步执行 Tkinter 命令来看到这一过程,像这样:

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

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放在它的父组件中,位于前一个兄弟组件的下面(如果有的话)。你可以使用选项来指定相对位置或调整大小的行为。

Tkinter还有其他的几何管理器,比如grid和place,想了解更多比较可以查看这个回答

撰写回答