2011-01-10 72 views
5

我學習的Tkinter和建立一個簡單的8益智遊戲。
(例如:http://www.permadi.com/java/puzzle8/Python的Tkinter的填充問題

每個數字都是使用網格佈局放置到Frame中的Canvas對象。其中一個對象是在Canvas對象之間添加額外的填充。我設置了邊框寬度爲畫布對象-2這解決了一些人的問題,但只是稍微減少了微胖我。將此值設置爲-4開始切入我的畫布區域。

我假設的網格佈局的細胞有一些默認的填充或邊框寬度,但我還沒有找到一種方法來刪除它。設置padx,pady,ipadx,打電話時ipady值格()在畫布上的對象似乎並沒有幫助的。

我發現的另一個奇怪現象是當我爲我的Canvas對象製作邊框時使用了create_rectangle,但我必須以4,4而不是0,0或2,2開始x_1和y_1,這是我期望的2px邊框。

這是我的代碼。任何幫助/建議/解決方法/以其他方式非常感謝。

#!/usr/bin/python 

from Tkinter import * 

class Number(Canvas): 
    def __init__(self, master=None, number=1): 
     Canvas.__init__(self, master, width=100, height=100, bd=-2) 
     self.create_text(50, 50, text=str(number), anchor=CENTER) 
     self.create_rectangle(4, 4, 98, 98, width=2) 


class Application(Frame): 
    def create_widgets(self): 
     self.playarea = Frame(self, width=300, height=300) 
     self.playarea.grid_propagate(0) 
     self.playarea.grid() 
     self.playarea.numbers = [] 
     for number in xrange(1, 10): 
      num_obj = Number(self.playarea, number) 
      self.playarea.numbers.append(num_obj) 
      row = number // 3 
      col = number % 3 
      num_obj.grid(row=row, column=col) 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.grid() 
     self.create_widgets() 


def main(): 
    app = Application() 
    app.master.title("Sample Application") 
    app.mainloop() 

if __name__ == '__main__': 
    main() 

回答

9

最有可能您的問題的原因是,你忽略了每個畫布highlightthickness屬性設置爲零。此值控制用於表示焦點的小部件周圍的彩色環。

下面是試圖解決這些類型的佈局問題時,一招:給每個窗口小部件不同的背景顏色(即:根窗口顏色,你的內框顏色,畫布顏色)。然後,您可以使用這些顏色作爲指導,查看哪些小部件擁有您嘗試消除的空間。

+1

highlightthickness是罪魁禍首。謝謝您的幫助!背景技巧也創造了奇蹟。 – zrbecker 2011-01-10 12:47:15