2012-01-03 76 views
2

我目前正在學習一篇文章,嘗試自學更多關於TkInter的內容,因爲我正試圖改進我的Python 3編程。文本可以在這裏找到,如果必要的話:http://www.ferg.org/thinking_in_tkinter/all_programs.htmlTkInter中.pack和.configure小部件之間的區別?

在標示爲「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)按鈕2,過程基本相同,爲Button1,但不是訪問按鈕的字典,我們使用的按鈕內置的‘配置’方法

(3)。對於button3,我們看到配置方法可以ta ke多個關鍵字參數,所以我們可以在一個語句中設置多個選項。「

解釋究竟是什麼意思?和in一樣,.configure方法的實際區別(使用.pack)還是需要? 「按鈕字典」是什麼意思?

回答

1

Tkinter的對象屬性不通過蟒蛇屬性的機制來處理(也就是你可以不可以 self.button1.text = "hello" )。相反,Tkinter的提供兩種方式來改變這一屬性:

  • 使用對象作爲dictionnary:self.button1["text"] = "hello"
  • 使用config法命名參數:

兩者是等價的。請注意,您也可以通過構造函數named參數傳遞此類初始化值以執行實例化和初始化一步:self.button1 = Button(self.myContainer1, text="hello")

pack服務於完全不同的目的。這是一個幾何管理指令。如果沒有參數,使用button1.pack()請求將button1放置在其先前兄弟(如果有)下方的其父部件中。您可以使用options指定相對位置或調整行爲。

還有其他的tkinter幾何管理器:網格和地點,請參閱this response進行比較。

+0

你碰巧知道沒有選擇屬性機制的原因嗎?當Tkinter首次在Python 1.x中加入時,'__setattr__'方法和朋友是否不存在?或者是否有意識的決定,使用'__setitem__'會有所改善?我目前正在查看是否有舊的PEP或郵件列表討論過這個問題,但我還沒有發現任何東西。 – ArtOfWarfare 2015-05-10 17:12:51

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()