位置

2017-10-24 5 views
0

次のコードをTkinterのウィンドウのサイズを変更:位置

from tkinter import * 
root=Tk() 
for x in range(10): 
    for y in range(10): 
     canvas=Canvas(root, width='15',height='15',highlightthickness=0,bg='red')      
     canvas.create_line(canvas.winfo_x(),canvas.winfo_y(),canvas.winfo_x()+15,canvas.winfo_y()+15,width=2,fill='black') 
     canvas.grid(row=y,column=x,sticky='NESW') 
for x in range(10): 
    for y in range(10): 
     root.columnconfigure(x,weight=1) 
     root.rowconfigure(y,weight=1) 
root.mainloop() 

はキャンバスを充填した10×10のグリッドである、thisを生成します。各キャンバスの左上から右下に向かって線が伸びています。

キャンバスウィジェットのサイズを変更すると、キャンバスウィジェットのサイズは正しく変更されますが、線の形状はlike thisです。行はウィンドウ/ウィジェットのサイズに従って調整する必要があります。

問題の核心は、ウィジェットの左上隅の座標を使用して行が作成され、各方向に15ピクセル拡張されていることです。ウィジェットの右下隅の座標を取得する方法があるので、線がその形状を動的に変更できるか、またはウィジェットに対して線の形状を維持する他の方法がありますか?

答えて

1

winfo_widthwinfo_heightメソッドを使用して、任意のウィジェットの現在の幅と高さを取得できます。キャンバスのサイズが変更されたときを追跡するために<Configure>メソッドにバインドする場合、イベントオブジェクトのサイズはwidthheightです。例えば

from tkinter import * 

def redraw_line(event): 
    width = event.width 
    height = event.height 
    canvas = event.widget 
    canvas.coords("diagonal", 0, 0, width, height) 

root=Tk() 
for x in range(10): 
    for y in range(10): 
     canvas=Canvas(root, width='15',height='15',highlightthickness=0,bg='red')      
     canvas.bind("<Configure>", redraw_line) 
     # coordinates are irrelevant; they will change as soon as 
     # the widget is mapped to the screen. 
     canvas.create_line(0,0,0,0, tags=("diagonal",)) 
     canvas.grid(row=y,column=x,sticky='NESW') 

for x in range(10): 
    for y in range(10): 
     root.columnconfigure(x,weight=1) 
     root.rowconfigure(y,weight=1) 


root.mainloop()