質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

568閲覧

Python tkinter canvas テキスト情報の取得/保存/復元

conan_ed

総合スコア3

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/05/03 00:46

編集2023/05/03 05:55

実現したいこと

Python初心者です。至らない点があると思いますが、ご教授いただければ幸いです。
tkinterのcanvas機能を使用して、新規作成したウインドウにテキストデータをインポート→配置→マウスによる移動ができるアプリを作りたいと考えております。(付箋アプリのようなものです)
このアプリに表示している内容はウインドウが閉じらた後やPCのシャットダウン後にも復元できる仕様にしたいと考えております。

保存/復元方法がわからず、そもそもできるのか?
という観点も含めてアドバイスを頂ければと考えております。

前提

canvas.create_text(200, 150, text="5/8 出張")
にて配置したtextの座標や表示内容(ここでは "5/8 出張")を保存し、
間違ってアプリを終了した際などに復元させたい。
※テキストの座標や表示内容は変化し、複数配置されるものとします

現状では、
canvas.create_text(200, 150, text="5/8 出張")
にて表示したtext=の中身"5/8 出張"を書き出す方法がわからないという状況です。
座標(200,150)は canvas.coords()で受け取ることができるので、
text=の中身"5/8 出張" を書き出す方法が存在するのか?そもそも不可能なのか…

私の知見が狭いため、上手く表現できないのですが、
canvas.xxxxxxx()の関数の戻り値としてtext=の中身 "5/8 出張" が受け取れる等の
機能があれば解決できそうなのですが…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2023/05/03 02:01

> アプリを作りたいと考えております。(付箋アプリのようなものです) 現状はどこまで作成されているのでしょうか?
conan_ed

2023/05/03 03:58

コメントありがとうございます。 恥ずかしながら、まだPythonを始めたばかりで、プログラミングも初心者です。 現状では、webサイトと書籍でtkinterについて勉強しながら、 ウインドウ作成→固定テキスト配置→マウスでドラッグ&ドロップ(移動)→文字色変更,座標取得… 程度の状態です。 ここまで進めた段階で、今回課題としている保存/復元ができないのであれば、 私がアプリで実現したい機能を達成できないのでは?と思い、現在に至ります。 もし、現状の方針が間違っているのであれば早い段階で別の手法に切り替えたいと思います。 ただし、Pythonで実現したいという前提があります。
meg_

2023/05/03 04:31

コードが不明なので確定的なことは言えませんが、何かしらの外部ファイルに書き出し&読み出しを行えば、情報の保存は可能なのでは?と思います。
conan_ed

2023/05/03 05:07

meg_様 コメントありがとうございます。 私が調べた限りですと、tkinterのcanvas機能では画像ファイル(postscript)で保存はできるようです。 ただ、再編集したい為、widgetの詳細情報を保ったまま保存したいので、 canvas.create_text(200, 150, text="5/8 出張") にて表示したtext=の中身"5/8 出張"を書き出す方法がわからないという状況です。 座標(200,150)は canvas.coords()で受け取ることができるので、 text=の中身"5/8 出張" を書き出す方法が存在するのか?そもそも不可能なのか… 私の知見が狭いため、上手く表現できないのですが、 canvas.xxxxxxx()の関数の戻り値としてtext=の中身 "5/8 出張" が受け取れる等の 機能があれば解決できそうなのですが…
melian

2023/05/03 06:30

一応、itemcget() メソッドで抽出できますが、canvas.create_text() の戻り値(オブジェクトID)が必要です。 object_id = canvas.create_text(200, 150, text="5/8 出張") text = canvas.itemcget(object_id, 'text')
conan_ed

2023/05/03 07:00

melian様 コメントありがとうございます。 的確な回答ありがとうございます! オブジェクトIDはcanvas.find_closest()にて取得できていたので、無事にテキストを抽出できました。 正しく求めていた内容です。 上記コメント、回答欄に記載頂ければ解決済みにさせて頂きたいと思います。
melian

2023/05/03 07:04

ありがとうございます、回答欄に記載しました。
guest

回答1

0

ベストアンサー

itemcget() メソッドで抽出できますが、create_text() で作成したテキストオブジェクトの ID が必要です。

python

1object_id = canvas.create_text(200, 150, text="5/8 出張") 2text = canvas.itemcget(object_id, 'text')

投稿2023/05/03 07:04

melian

総合スコア19798

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問