私はTkinterを学び、シンプルな8パズルゲームを構築しています。
(例:http://www.permadi.com/java/puzzle8/)Python Tkinterパディング問題
各数値は、グリッドレイアウトを使用してフレームに配置されたCanvasオブジェクトです。オブジェクトの1つは、Canvasオブジェクト間に余分なパディングを追加することです。キャンバスオブジェクトの境界線の幅を-2に設定して、いくつかの人々の問題を解決しましたが、余分な余分なパディングが減少しました。この値を-4に設定すると、私のキャンバス領域に切れていきます。
グリッドレイアウトのセルにデフォルトのパディングまたはボーダー幅があると仮定していますが、削除する方法が見つかりませんでした。 Canvasオブジェクトでgrid()を呼び出すときにpadx、pady、ipadx、ipadyの値を設定しても、どちらも役に立ちません。
私が見つけたもう一つの奇妙な点は、私のCanvasオブジェクトの境界をcreate_rectangleを使って作成したときでしたが、私はx_1とy_1を4,0で0,0,2の代わりに開始しなければなりませんでした。 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()
ハイライトの太さが原因でした。助けてくれてありがとう!バックグラウンドのトリックも驚異的でした。 "各ウィジェットに異なる背景色を与える"の場合は – zrbecker
+10。私はこれまで、レイアウトの面で難しい問題を抱えていましたが、あなたがそれを述べるまでそれを忘れてしまいました。 –