Tkinterで円を等間隔に描画したいです。
ただし、ウィンドウサイズを変えた場合は、円の大きさは変えず、位置はgrid()やpack()みたいに動的に移動する。
canvasのcreate_oval()で楕円の描画ができるようなので下記のようにとりあえず書いてみました。
grid()やpack()みたいに動的にできるか分からないので、とりあえずバインドでリサイズするたびにウィンドウの大きさを取得してその値を使って適当に移動するようにしました。
このときの円の座標の求め方がわかりません。
・円の大きさは、可能であれば後からソースコードで簡単に書き変えられる方が望ましい(が、create_oval()の座標指定を変えることになるか?)
・円は等間隔に表示
・とりあえず今回は円の個数は1個。多分後から「横に3個並べる」、「縦に2個並べる」みたいなことになるかも
座標については下記ソースコードのx1,y1,x2,y2で決めています。
Python
1import tkinter as tk 2 3def resized(e): 4 win_width = win.winfo_width() 5 win_height = win.winfo_height() 6 x1 = win_width * 0.3 7 y1 = win_height * 0.3 8 x2 = x1 + 100 9 y2 = y1 + 100 10 11 cv.delete("oval") 12 cv.create_oval(x1, y1, x2, y2, tag="oval", fill="red", outline="blue", width=5) 13 14win = tk.Tk() 15 16win.rowconfigure(0, weight=1) 17win.columnconfigure(0, weight=1) 18 19win_width = win.winfo_width() 20win_height = win.winfo_height() 21 22""" 参考記事 23 24 https://shizenkarasuzon.hatenablog.com/entry/2018/12/31/080612 25 canvas.create_oval()関数の引数は、(円の左上x座標、円の左上y座標、円の右下のx座標、円の右下のy座標)です。 26 27 https://kotsubu-chan.hatenadiary.org/entry/20020820/1249123877 28 keyword arguments 29 fill 図形の内部を塗るときの色(規定値は 'black')を指定します 30 outline 図形の輪郭を描くときの色(規定値は 'black')を指定します 31 width 図形の輪郭を描くときの幅(画素数:規定値は 1)を指定します 32 33""" 34 35x1 = win_width * 0.3 36y1 = win_height * 0.3 37x2 = x1 + 100 38y2 = y1 + 100 39 40cv = tk.Canvas(win) 41cv.create_oval(x1, y1, x2, y2, tag="oval", fill="red") 42cv.grid(row=0, column=0, sticky="nsew") 43 44win.bind("<Configure>", resized) 45 46 47win.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/08 04:39 編集
2020/09/08 05:11
2020/09/08 05:55
2020/09/08 06:47
2020/09/08 07:12