1

以下は、メニュー コマンドの例を含む Tkinter テキスト フィールドを生成します (テキストをテキスト フィールドにロードします)。どのコマンドが実行されたかを表示するステータス行として機能するラベルがあるはずです。そこで、「ロード」をクリックすると「ファイルがロードされました」と表示されるようにしたいです。入ろうか悩んでいself.statusますappmenu。理由: app(理由によりself.text) を最初に呼び出す必要がありますが、 を含めるには、self.statusを最初に呼び出す必要があります。いいえ?助けてください。ありがとうございます。appappmenu

import Tkinter
import tkFileDialog

class App (object):
  def __init__(self, master, status):
    self.status = status
    frame = Tkinter.Frame(master)
    frame.pack(fill="both", expand=1)
    self.text_field(frame)
    self.status_line(frame)

  def status_line (self, frame):
    statusline = Tkinter.Label(frame, text = self.status)
    statusline.pack()

  def text_field(self, frame):
    self.text = Tkinter.Text(frame)
    self.text.pack(fill="both", expand=1)

class App_Menu(object):
  def __init__(self, master, text, status):
    self.text = text
    self.master = master
    menubar = Tkinter.Menu(master)
    self.menuBar = Tkinter.Menu(master)
    master.config(menu=self.menuBar)
    self.fillMenuBar(text)

  def fillMenuBar(self, text):
    self.menuFile = Tkinter.Menu(self.menuBar, tearoff=False)
    self.menuFile.add_command(label="Open",command=self.load)
    self.menuBar.add_cascade(label="File",menu=self.menuFile)

  def load(self):
    self.file=tkFileDialog.askopenfile()
    self.text.delete(1.0, Tkinter.END)
    if self.file:
      self.text.insert(1.0,self.file.read())
      self.status = "file loaded"

root = Tkinter.Tk()
status = "status"
app = App(root, status)
appmenu = App_Menu(root, app.text, status)
root.mainloop()
4

1 に答える 1

2

ではself.status = ...、インスタンス変数に新しい値を割り当てますが、ラベルのテキストは変更されません。そのために、StringVar とsetメソッドを使用してその値を変更できます。

class App (object):
  # ...
  def status_line (self, frame):
    statusline = Tkinter.Label(frame, textvariable = self.status)
    statusline.pack()
  # ...

class App_Menu(object):
  def __init__(self, master, text, status):
    # ...
    self.status = status

  # ...
  def load(self):
    self.file=tkFileDialog.askopenfile()
    self.text.delete(1.0, Tkinter.END)
    if self.file:
      self.text.insert(1.0,self.file.read())
      self.status.set("file loaded")

root = Tkinter.Tk()
status = Tkinter.StringVar(root)
status.set("status")
于 2013-05-03T19:36:02.467 に答える