角を丸めた矩形を作成したいと思います。私はtkinterのキャンバスを使用しています。角を丸めたtkinterキャンバスの矩形を作るには?
答えて
tobiasの方法に対する代替アプローチを提供することは、実際には1つのポリゴンで行うことです。
これは、最適化が心配されている場合、または単一のオブジェクトを参照するためのタグシステムについて心配する必要がない場合、キャンバスオブジェクトの1つであるという利点があります。
コードは少し長くなりますが、ポリゴンをスムージングするときに、同じ座標を2回与えてスムージングを「停止」するというアイデアを利用しているので、基本的です。 、あなたはちょうどあなたが長方形にし、その後に丸められる「半径」を指定することになり、通常の座標を提供することができ、この機能を使用する
from tkinter import *
root = Tk()
canvas = Canvas(root)
canvas.pack()
def round_rectangle(x1, y1, x2, y2, radius=25, **kwargs):
points = [x1+radius, y1,
x1+radius, y1,
x2-radius, y1,
x2-radius, y1,
x2, y1,
x2, y1+radius,
x2, y1+radius,
x2, y2-radius,
x2, y2-radius,
x2, y2,
x2-radius, y2,
x2-radius, y2,
x1+radius, y2,
x1+radius, y2,
x1, y2,
x1, y2-radius,
x1, y2-radius,
x1, y1+radius,
x1, y1+radius,
x1, y1]
return canvas.create_polygon(points, **kwargs, smooth=True)
my_rectangle = round_rectangle(50, 50, 150, 100, radius=20, fill="blue")
root.mainloop()
:
この
は何ができるかの例です。角。**kwargs
を使用すると、普通は
create_
メソッドと同様に、
fill="blue"
などのキーワード引数を渡すことができます。
コーディングは複雑に見えますが、コーナーが複雑に見えますが、「矩形」内の各ポイントに体系的に移動して、コーナー以外のポイントを2度与えます。
長いコード行に気にしない場合は、すべての座標を1行に入れて、関数を2行(!)にするだけです。これは次のようになります。
def round_rectangle(x1, y1, x2, y2, r=25, **kwargs):
points = (x1+r, y1, x1+r, y1, x2-r, y1, x2-r, y1, x2, y1, x2, y1+r, x2, y1+r, x2, y2-r, x2, y2-r, x2, y2, x2-r, y2, x2-r, y2, x1+r, y2, x1+r, y2, x1, y2, x1, y2-r, x1, y2-r, x1, y1+r, x1, y1+r, x1, y1)
return canvas.create_polygon(points, **kwargs, smooth=True)
これは(これはONEキャンバスオブジェクトである念頭に注意してください)以下を生成します。
これには組み込みの方法がないようです。最も近いのはsmooth=1
のポリラインですが、それでも古いテレビ画面のように見え、側面もやや湾曲しています。
代わりに、あなたはラインや円弧から角丸長方形を組み合わせて、ヘルパー関数を定義することができます。
def rounded_rect(canvas, x, y, w, h, c):
canvas.create_arc(x, y, x+2*c, y+2*c, start= 90, extent=90, style="arc")
canvas.create_arc(x+w-2*c, y+h-2*c, x+w, y+h, start=270, extent=90, style="arc")
canvas.create_arc(x+w-2*c, y, x+w, y+2*c, start= 0, extent=90, style="arc")
canvas.create_arc(x, y+h-2*c, x+2*c, y+h, start=180, extent=90, style="arc")
canvas.create_line(x+c, y, x+w-c, y )
canvas.create_line(x+c, y+h, x+w-c, y+h )
canvas.create_line(x, y+c, x, y+h-c)
canvas.create_line(x+w, y+c, x+w, y+h-c)
例:
import tkinter
root = tkinter.Tk()
canvas = tkinter.Canvas(root)
canvas.pack()
rounded_rect(canvas, 20, 20, 60, 40, 10)
root.mainloop()
あなたはまた、別の**options
パラメータを提供することができ個々の部品の線幅、色などを設定することができますが、この問題は、たとえばラインとアークは、ラインカラー(fill
とoutline
それぞれ)に対して異なるパラメータを使用しています。また、塗りつぶした四角形を使用する場合は、複数の四角形を使用して2番目の方法として指定する必要があります。
- 1. 角を丸めたFabricJSキャンバス
- 2. 矩形の角の丸いバウンスを作る方法 - 処理
- 3. TkInter python - Sierpinskyの三角形を得るためのキャンバス上の点の作成
- 4. 四角形のUIImageを丸い矩形に入れます
- 5. iOS - 角丸矩形のUIViewサブクラスを作成
- 6. 2Dキャンバスで矩形の角を追加するには?
- 7. ベゼルを使用したココス2d-xの角丸矩形
- 8. シーングラフの矩形ノードに角を丸く設定する方法
- 9. 矩形キャンバスのエフェクトシャドウ
- 10. Java - 2つの丸い角を持つ矩形を描く
- 11. キャンバスに矩形を追加するWPF
- 12. 角2:キャンバス上にマウスで描画する矩形。
- 13. キャンバスの壁に矩形を描く
- 14. キャンバスを使って角丸四角形を徐々に描く方法
- 15. どのようにベクトル矩形の上に角を丸くしますか?
- 16. WPFの四角形 - 上の角だけを丸める
- 17. objective-c丸い矩形ボタンを隠す
- 18. Tkinterを使って矩形を描く?
- 19. アンドロイド - レイアウトの丸い矩形枠
- 20. 角を丸めたFrameLayout
- 21. QT 5.7 QMLクイック半透明矩形(角が丸みを帯びている)
- 22. フリップビューコントローラを使用した場合の丸い矩形ボタンの動作
- 23. NSMutableAttributedStringのUILabelに角を丸めた
- 24. 丸められたボタンtkinterのpython
- 25. 角が丸い三角形
- 26. 角が丸い三角形を作成する
- 27. 角が丸い三角形を作成するSVGパス
- 28. キャンバスとsvgを使用して丸い四角形を描く方法は?
- 29. キャンバスに矩形を描画するための線の色を設定する方法は?
- 30. ココアで四角形を作る方法は?リサイズ可能な矩形の場合
私は、これはとてもよさそう驚いて。私が同じことをしようとすると、私は古いテレビのように、まっすぐなエッジが少し外側に曲がっていました。しかし、私は20点ではなく12点しか使用していませんでした.1 IMHOは、明示的な 'x1、y1、x2、y2'または' x、y、w、h'パラメータを使う方が良いでしょう。 –
@tobias_k私は、この方法のトリックは両側にポイントを与えていると思います(角から離れた '半径')ので、滑らかではありません。また、編集した 'x1、y1、x2、y2'の提案についても同意します。 – SneakyTurtle