0

GUIを生成するためにtkinterを使用しています。

from Tkinter import *
root = Tk()
root.title("explorer")
f=Canvas(root, width=1200, height=768)
f.grid()
main_line = f.create_line(200,300,300,300, tags="main_line_tag", width=5)
mainloop()

上記のサンプルでは、​​行の横にタグと ID を出力したいと考えています。どうすればいいですか。

アップデート

main_line = f.create_line(200,300,300,300, tags="main_line_tag", width=5)
tags_text = ', '.join(f.gettags(main_line))
line_text = "%s: %s" % (main_line, tags_text)
f.create_text(220,320, text=line_text)

ソリューションは機能していますが、私の実際の要件は

f=Canvas(root, width=1200, height=768)
f.grid()
class Create:
      def __init__(self,xy,t):
          self.xy=self.xy
          self.t=t
          for i in range(1, self.t+1):
              exec 'main_line%d = f.create_line(200,300,300,300, tags="main_line_tag%d")' %(i,i)
    #end of class Create
def update(t,newxy):
    for i in range(1,t+1):
         exec'f.coord(main_line%d, *newxy)'%i
mainloop()

上記のサンプル コードでは、コードを実行するときに線の座標を更新しようとしています。タグの場合でも main_line1 が定義されていません。これを解決する方法。

ありがとう

4

1 に答える 1

1

テキスト アイテムを描画し、ID とgettagsCanvas メソッドを使用してテキストを作成するだけです。

main_line = f.create_line(200,300,300,300, tags="main_line_tag", width=5)
tags_text = ', '.join(f.gettags(main_line))
line_text = "%s: %s" % (main_line, tags_text)
f.create_text(220,320, text=line_text)

アップデート

問題exec 'main_line%d = ...は、行を作成しているが、参照を保存していないことです。ただし、使用execは推奨できない解決策であり、単純なリストで同じことを行う別の方法があります。

lines = []
def update(t, newxy):
    for line in lines:
        f.coord(line, *newxy)

class Create:
    def __init__(self, xy, t):
        self.xy = xy
        self.t = t
        for i in xrange(self.t):
            new_line = f.create_line(200,300,300,300, tags="main_line_tag%d" % (i+1))
            lines.append(new_line)
于 2013-03-15T12:00:16.827 に答える