2011-01-29 20 views
0

私はTkinterキャンバスウィジェットを持っており、それに点描パターンを作成したいと思います。 create_lineメソッドを使用して手動で行うことができます。しかし、もっと良い方法があるように思うだろう。どんな助けでも大歓迎です。Tkinterキャンバスウィジェットをスティプルする最も簡単な方法は何ですか?

現在作業している内容(プログラムを終了するにはAlt + F4を押す)

import Tkinter, re 

class StippleCanvas(Tkinter.Tk): 
    def __init__(self, parent): 
     Tkinter.Tk.__init__(self, parent) 


     self.overrideredirect(1) 
     self.resizable(False,False) 
     self.wm_attributes("-topmost", 1) 
     self.attributes("-alpha", 0.9) 

     w = 90 
     h = 90 

     self.Ca = Tkinter.Canvas(self, width=w, height=h, highlightthickness=0, bd=0, bg='grey25') 
     self.Ca.grid(column=0, row=0) 
     self.bind('<Button-1>', self.relative_mouse_position) 
     self.bind('<ButtonRelease-1>', self.wid_unbind) 

     i0 = 0 
     while i0 < w: 
      i1 = 0 
      while i1 < h: 
       self.Ca.create_line(i1, i0, i1+1, i0, fill='grey20', width=1) 
       i1 = i1 + 2 
      i0 = i0 + 2 

    def geom_grab (self): 
     Cursorgfltr = re.compile(r"(\d+), (\d+)") 
     CursorPos = self.winfo_pointerxy() 
     CursorPosGr = Cursorgfltr.search(str(CursorPos)) 
     self.CursorX = int(CursorPosGr.group(1)) 
     self.CursorY = int(CursorPosGr.group(2)) 

     gfltr = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)") 

     gf = gfltr.search(self.wm_geometry()) 
     self.X = int(gf.group(4)) 
     self.Y = int(gf.group(6)) 

    def relative_mouse_position (self, event): 
     self.geom_grab() 

     RelX = self.CursorX - self.X 
     RelY = self.CursorY - self.Y 

     self.Ca.bind("<Motion>", lambda event: self.wid_drag(event, RelX, RelY)) 

    def wid_drag (self, event, RelX, RelY): 


     self.geom_grab() 

     X = self.CursorX - RelX 
     Y = self.CursorY - RelY 

     if X < 0: 
      X = 0 

     if Y < 0: 
      Y = 0 

     self.wm_geometry('+' + str(X) + '+' + str(Y)) 


    def wid_unbind (self, event): 
     self.Ca.unbind("<Motion>") 

def run(): 
    StippleCanvas(None).mainloop() 
if __name__ == '__main__': 
    run() 

答えて

0

最も単純なのは?それはあなたの「シンプルな」定義に依存します。 1つの方法は、描画プログラムを使用して背景に必要なイメージを作成し、それをキャンバスに配置することです。これは、キャンバスのサイズを事前に知っていることを前提としています。単一のイメージをキャンバスに挿入するよりも簡単なことはありません。

このテーマのバリエーションは、小さなタイルを作成し、tkinterの画像処理を使用して、新しい画像にタイル張りされた元の画像で適切なサイズの新しい画像を作成することです。これは、キャンバスのサイズを変更するたびに実行できます。彼らはTclのではなく、Pythonであるけれども、こののいくつかの例は、以下のリンクで見ることができます(のpythonに変換するには、そうさせてはいけない非常に単純であるという幽霊ます):

http://wiki.tcl.tk/4389

ものの、率直に言って、あなたがしたことは簡単です。スティプル描画を関数に移してキャンバスがサイズを変更するたびに(つまり:<Configure>イベントを取得したとき)再実行することができます。

関連する問題