tkinter: canvasのcreate_textでtextvariableは可能!?
解決したいこと
tkinterのキャンバスクラスでテキストを描画しています。
テキストを任意に変更することを考えていますが、
create_text のオプションにはtextvariableがないので困っていました。
ネット上で、唯一解決策らしきものがありました。
https://stackoverflow.com/questions/28518976/how-to-add-a-tkinter-text-variable-in-canvas-text
発生している問題・エラー
これを参考にして、コードを組み上げたらうまくいきました。特に、固定表現とコメントした部分が重要ポイントと見当をつけましたが、そもそもこれでうまくいく理由が分かりません。そのため、発展性もなく、自身の実力にはつながっておりません。
これがうまくいく理由。または他にcreate_textでtextvariableを実現する方法、その他コード上の問題等、なんでも良いので是非教えてください。よろしくお願いします。
該当するソースコード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tkinter as tk
import random
CANVAS_WIDTH = 540
CANVAS_HEIGHT = 320
onigi_lst = ["さけ", "いくら", "うめ", "こんぶ", "ツナマヨ", "なっとう"]
def rotate_switch():
onigi = random.choice(onigi_lst)
svr1.set(onigi)
#固定表現
def on_change(varname, index, mode):
canvas.itemconfigure(cv_txt, text=root.getvar(varname))
#main関数
def main():
global canvas
root = tk.Tk()
canvas = tk.Canvas(
root,
width=CANVAS_WIDTH,
height=CANVAS_HEIGHT,
bg="white",
highlightthickness=0)
canvas.pack()
# ボタン作成
button = tk.Button(
root,
text="ボタン",
command=rotate_switch)
button.pack()
#座標の指定
lstB = [[420, 70], [120, 130], [300, 190], [350, 280]]
canvas.create_polygon(lstB,
tag= "polygonA", fill="", outline="blue", width=10,
smooth=1,)
svr1 = tk.StringVar(root)
svr1.set('おにぎりの具は?')
svr1.trace_variable('w', on_change)
cv_txt = canvas.create_text(270,160, font=("", 40), text=svr1.get())
root.mainloop()
if __name__ == '__main__':
main()