問題タブ [tkinter-canvas]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tkinter - Tkinter; キャンバスでスクロールバーを使用する
プログラムの一部にスクロールバーを作成しようとしています。親フレームには 3 つのラベル フレーム ウィジェットがあり、そのうちの 1 つは 50 ものオプション メニューを表示する必要があるため、スクロールバーが必要になります。
スクロールバーを使用してラベル フレームをスクロールできないことはわかっているので、このラベル フレーム内にスクロール可能なキャンバスを作成しました。次に、キャンバス内にフレームを挿入しました。これを使用して、オプション メニューを表示します。次に、スクロールバーをキャンバスにアタッチすると、スクロールバーがラベル フレーム内に配置されます。問題は、スクロールバーは機能しているように見えますが、どれだけスクロールしても、最初の 10 個のオプション メニューしか表示されないことです。以下に例を示します。
python - FigureCanvasTkAgg の内容を更新する方法
を使用して Tkinter FigureCanvasTkagg にいくつかのデータをプロットしていますmatplotlib
。ボタンが押されたときに、データをプロットして新しいデータを描画する図をクリアする必要があります。
コードのプロット部分は次のとおりです (前に定義された App クラスがあります)。
このようなキャンバスの内容を更新するにはどうすればよいですか?
python - 作成後に Canvas オブジェクトの属性を変更できますか?
私はアメリカの信号機をシミュレートしようとしています.長方形の上に3つの円があり、すべてセットキャンバスに描かれています. シミュレーションは、次の順序で 2 秒ごとに表示されるライトを変更することによって「アニメーション」を反映することになっています: 緑 > 黄 > 赤 > 緑、など永久に。
これを行う唯一の方法は、canvas.move()、canvas.after()、canvas.update() パターンを使用して、塗りつぶされた楕円形のオブジェクトを移動し、塗りつぶされていない円を一度に 1 つずつ重ねることです。適切な速度で正しい順序で円を移動するためのロジックを取得しました。問題は、「緑」で塗りつぶされた円をインスタンス化するだけですが、この方法を使用して「黄色」または「赤」に変更することはできません。canvas.delete("filled") を実行し、2 秒ごとに異なる塗りつぶしで新しい場所に再描画するのはばかげているように思えます。
質問 1:fill
何らかの方法またはその他の手段を使用して、塗りつぶされた Canvas オブジェクトのオプションを自由に変更できる方法はありますか?
質問 2: このシナリオへのアプローチは間違っていますか? これをシミュレートするより良い方法はありますか?
python - Tkinterのキャンバスで「デフォルトの色」を持つ方法はありますか?
キャンバス オブジェクト (線、四角形など) の既定の色を個別に設定せずに設定する方法はありますか? デフォルトの色が黒であることはわかっていますが、基本的にはそれを変更して、後で作成するすべてのものをたとえば緑に変更したいと考えています。PythonのTkinterでこれを行う方法はありますか?
python - Tkinter からキャンバスを印刷する
印刷したい長方形とラベルのみを含むキャンバスを作成しました。次のように、キャンバスをポストスクリプトファイルに保存する方法しか見つけられませんでした。
必要に応じて、ウィンドウ全体を簡単に印刷できれば幸いです。
キャンバスを印刷するにはどうすればよいですか?
このプログラムは、Windows XP または 7 で使用されます。
python - Tkinter-キャンバスウィンドウにテキストを挿入する
create_text
とメソッドを使用して作成された、テキストウィンドウとキャンバスウィンドウ、またはウィジェットが配置されたTkinterキャンバスがありcreate_window
ます。キャンバスに配置するウィジェットはテキストウィジェットであり、作成して配置した後にテキストを挿入したいと思います。それが可能であるとしても、私はこれを行う方法を理解することはできません。を使用して作成後に編集canvas.itemconfig(tagOrId, cnf)
できることはわかっていますが、テキストをそのように挿入することはできません。これに対する解決策はありますか?
python - tkinterキャンバス:テキストオブジェクトの可変フォントサイズ?
次の図のように、tkinter キャンバスを使用して円の上にテキストを重ねて、きれいな写真を作成しています。
円のサイズが依存しているのと同じ数値にフォントサイズを依存させたいです。
私の問題は、上記のコードを使用すると、オーバーレイされたテキストがすべてのテキスト オブジェクトに対して一定のサイズになることです。正しいフォントサイズではなく、フォントサイズにしたい数字を表示するので、テキスト自体は正しいです。サイズ定義に定数整数を入れて (想定どおりに動作します)、上記の 2 行のコードの直後に del(tempfont) を追加して実験しましたが、この問題を解決する方法はまだ見つかりません。
私は何を間違っていますか?
問題を再現する自己完結型の小さなプログラムを次に示します。
要点は、フォントのサイズをrecurtext
再帰的に変更shows
し、フォントサイズをそのサイズで書き出すことです...またはそうすべきだと思います。これは tkinter のバグかもしれませんが、ここでロジックを間違えたのは私であるという希望をまだ持ち続けています。
python - Python tkinter キャンバスでの行の削除
マウスの右ボタンがクリックされたときにユーザーに行を削除させようとしています。ボタン3のプレスイベントをキャンバスにバインドし、それを次の関数に渡しました
ただし、行を右クリックしても何も起こりません。辞書を個別にテストしたところ、行オブジェクトは正しく保存されています。
これが私のバインディングです:
ディクショナリの初期化からのリクエストごとのその他のスニペット
線の作成には、2 つのハンドラーがあります。クリック時とリリース時で、両方の座標間に線を描画します。
辞書はここでうまく印刷されます。これらはすべて 1 つのクラス内の関数であることに注意してください。
python - Tkinter ドラッグ アンド ドロップ
キャンバス上でアイテムを移動できるようにするドラッグアンドドロップ機能に取り組んでいます.動作していますが(一種)、少ししか移動しませんが、線が画面を横切って撮影します(最終的にはキャンバスなので、そこにたどり着けません。ここからどこへ行けばよいかわかりません。以下は、これまでに作成したドラッグ アンド ドロップ コードです。
dragInfo は、データの保存に使用している辞書です。元々、キャンバス座標をウィンドウ座標に変換すると役立つと思っていましたが、それがない場合と同じように動作します。
python - Tkinter でキャンバス アイテムを接続する
私がやりたいのは、キャンバス上のアイテムを視覚的に「接続」することです。たとえば、ユーザーが 1 つの画像から 2 番目の画像に線を引いて、これら 2 つの画像を接続できるようにします。
ここで接続するとは、ユーザーが 1 つの画像をクリックして移動すると、接続を維持するために線のサイズが変更されることを意味します。基本的に、画像は線の終点となり、複数の画像を 3 番目の画像に接続できます。
線が画像の端に触れているかどうかを検出する方法はありますか?
この動的な方法でキャンバス上の線のサイズを変更する方法はありますか? 私が試した解決策は、基本的に元の行を削除して新しい行を再描画することですが、これは私が望むものではありません。