2013-07-12 41 views
0

這兩個函數的主要區別是什麼?.pack()和.place()之間的差異並將它們一起使用?

我目前正在研究一個包含畫布和標籤的程序,後者表現爲一個按鈕。現在,使用.pack()放置畫布,而使用.place()作爲標籤。此外,該程序會讀取並使用鼠標點擊的位置來執行某些操作。

目前有一個錯誤導致程序在單擊標籤時觸發意外動作,單擊標籤時鼠標單擊的x和y座標不在引用窗口中時我感到驚訝(正如我所期望的它是),而是標籤的左上角座標。

有沒有一種方法來設置它,使標籤不會修改其中的鼠標點擊的x和y座標?

我對python比較陌生,這是我用tkinter製作的第一個項目。如果需要,我可以根據要求提供代碼。

編輯:整個程序可以找到here。標籤從第87行開始添加:

 newgame_Label = Label(parent, anchor=NW, font="Calibri", 
      text="New Game") 
     newgame_Label.bind("<Button 1>", self.newgame_Click)  
     newgame_Label.place(x=450, y=300) 

     reset_Label = Label(parent, anchor=NW, font="Calibri", 
      text="Reset Board") 
     reset_Label.bind("<Button 1>", self.reset_Click)  
     reset_Label.place(x=450, y=400) 

函數initBoard在畫布上調用.pack()方法。該程序是Light's Out的克隆,認爲這將是學習python和tkinter的好方法。

或者我可以不使用標籤,只是使用create_text方法可用於畫布小部件,但這需要一些解決方法來確定它是否已被點擊。大多數人想知道爲什麼Label Widget的.place()雖然共享相同的框架,但它的行爲方式與事件相同。

+0

第一:你能告訴我們你的代碼嗎?第二:對於這個簡單的例子,你絕對應該使用'grid'幾何管理器:[GRID](http://effbot.org/tkinterbook/grid.htm)。 –

+0

已添加,請檢查編輯。如果我決定使用網格,我可以重疊一個畫布和標籤沒有任何問題? – diverges

回答

1

主要區別在於place可讓您指定絕對座標,而pack使用允許您沿窗口邊框放置小工具的框模型。

地方不是經常在現實世界的應用程序中使用。對於一小部分問題來說很好,但包和網格更有用。 Place要求您花費更多精力來正確調整GUI大小。

相關問題