[解決済み] tkinterで円を描くより簡単な方法?
2022-02-07 11:15:54
質問
に円を描く。
tkinter Canvas
は、通常
create_oval
メソッドを使用します。しかし、バウンディングボックスを供給することは、円を描くことを考える上で混乱することが多いのです。そのためのショートカットを考えるのは特に難しいことではないのですが、他に似たようなことをしている人が見つからなかったので、誰かが役に立つことを期待して投稿してみます。
どのように解決するのですか?
ここでは、次のようなトリックを紹介します。
モンキーパッチング
ここで、実際にメンバーを
tkinter
/
Tkinter
クラス
Canvas
. 以下は完全に機能するプログラム(Python 2.7および3.x)で、このうち3番目の段落が注目されます。これをあなたのコードに追加すると、次のように扱うことができます。
tk.Canvas.create_circle(x, y, r, options...)
は、組み込みメソッドと同じで、オプションは
create_oval
. 同じようなことを
create_arc
(4段落目) を指定し、オプションとして
end
の代わりに
extent
.
try:
import tkinter as tk
except ImportError:
import Tkinter as tk # Python 2
root = tk.Tk()
canvas = tk.Canvas(root, width=200, height=200, borderwidth=0, highlightthickness=0,
bg="black")
canvas.grid()
def _create_circle(self, x, y, r, **kwargs):
return self.create_oval(x-r, y-r, x+r, y+r, **kwargs)
tk.Canvas.create_circle = _create_circle
def _create_circle_arc(self, x, y, r, **kwargs):
if "start" in kwargs and "end" in kwargs:
kwargs["extent"] = kwargs["end"] - kwargs["start"]
del kwargs["end"]
return self.create_arc(x-r, y-r, x+r, y+r, **kwargs)
tk.Canvas.create_circle_arc = _create_circle_arc
canvas.create_circle(100, 120, 50, fill="blue", outline="#DDD", width=4)
canvas.create_circle_arc(100, 120, 48, fill="green", outline="", start=45, end=140)
canvas.create_circle_arc(100, 120, 48, fill="green", outline="", start=275, end=305)
canvas.create_circle_arc(100, 120, 45, style="arc", outline="white", width=6,
start=270-25, end=270+25)
canvas.create_circle(150, 40, 20, fill="#BBB", outline="")
root.title("Circles and Arcs")
root.mainloop()
結果
関連
-
Python百行で韓服サークルの画像クロールを実現する
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] 複数行の長い文字列を作成するためのPythonicな方法
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] Pythonで複数行のコメントを作成する方法はありますか?
-
[解決済み] ファイルに行を書き込む正しい方法?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] モンキーパッチとは何ですか?