2016-08-19 16 views
0

私は、継続的に更新されたTXTファイルから読み込み、しばらくの間毎回更新するGUIをまとめようとしています。これまでのところ私は、最初の部分で成功したと私はループに全部「をroot.afterを()」を使用することができないのですが、それはNameErrorになり:root.afterがfunction_nameを見つけることができません

import tkinter as tk 
root = tk.Tk() 
class App: 

    def __init__(self, root): 
     frame = tk.Frame(root) 
     frame.pack() 
     iAutoInEN = 0 
     iAvailableEN = 0 

     self.tkAutoInEN = tk.StringVar() 
     self.tkAutoInEN.set(iAutoInEN) 
     self.tbAutoInEN = tk.Label(root, textvariable=self.tkAutoInEN) 
     self.tbAutoInEN.pack(side=tk.LEFT) 

     self.button = tk.Button(frame, text="Start", fg="red", 
           command=self.get_text) 
     self.button.pack(side=tk.LEFT) 

    def get_text(self): 
     fText = open("report.txt") #open a text file in the same folder 
     sContents = fText.read() #read the contents 
     fText.close() 

     # omitted working code that parses the text to lines and lines 
     # to items and marks them with numbers based on which they are 
     # allocated to a variable 

       if iLineCounter == 1 and iItemCounter == 3: 
        iAutoInEN = int(sItem) 
        self.tkAutoInEN.set(iAutoInEN) 

     root.after(1000,root,get_text(self)) 

app = App(root) 
root.mainloop() 

try: 
    root.destroy() # optional; see description below 
except: 
    pass 

最初のインスタンスが問題なく実行され、値を更新します0からTXTファイル内の番号へのが、エラーを伴う

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\...\Python35\lib\tkinter\__init__.py", line 1549, in __call__ 
return self.func(*args) 
    File "C:/.../pythonlab/GUI3.py", line 117, in get_text 
self.after(1000,root,get_text()) 
NameError: name 'get_text' is not defined 

EDIT:推奨 "self.after(1000年、self.get_text)"

class App: 
    ... 
    def get_text(self): 
     fText = open("report.txt") #open a text file in the same folder 
     sContents = fText.read() #read the contents 
     fText.close() 

     # omitted code 

      if iLineCounter == 1 and iItemCounter == 3: 
        iAutoInEN = int(sItem) 
        self.tkAutoInEN.set(iAutoInEN) 

     self.after(1000,self.get_text) 
に変更

エラーが

Traceback (most recent call last): 
File "C:/.../pythonlab/GUI3.py", line 6, in <module> 
class App: 
File "C:/.../pythonlab/GUI3.py", line 117, in App 
self.after(1000, self.get_text) 
NameError: name 'self' is not defined 

はまた、これはPythonで私の非常に最初のプログラム(だけではなく)でご検討ください変わるので、あなたは、もう少し明確な回答であるならば、私は感謝(例えば、インデントエラーを指摘するときは、コードの正確な行を参照してください)。

+1

あなたのを修正インデント。メソッドはインデントされていないので、クラスの一部ではありません。 –

+0

ありがとうございます - どの方法を正確に言及していますか?これは基本的に私の最初のPythonプログラムであり、私が行っているので学んでいるので、まだかなり失われています... :) – Eleshar

+0

インデントの問題は、編集時にテリーによって修正されました。以前は、あなたの 'init'と' get_text'関数はインデントされていなかったので、Appクラスに属していませんでした。 Appクラスは役に立たなかった。コンピュータのコードを編集したコードと一致するように変更して、今後の問題を回避してください。 – Xetnus

答えて

2

get_textAppクラスのメソッドなので、self.get_textと呼びます。

後はtkinterメソッドです。その場合はroot.afterと呼びます。そしてselfはあなたが入っているクラスを指しています。get_textは現在のクラスのメソッドなので、Javaのような他のプログラミング言語ではselfと同じです。

... 
root.after(1000, self.get_text) 
... 
+0

スーパー!それはものです! – Eleshar

+0

もう少し説明を書いてください。希望は何が起こっているのか理解するのを助けます。 – alpert

0

第1に、Jamesさんがコメントしたように、関数がクラスの一部であるようにインデントを修正する必要があります。その後

、この

root.after(1000, self.get_text) 

にこのライン

root.after(1000,root,get_text(self)) 

を変更私はあなたを与えたコードを使用して、次の質問への答えをチェックアウト: Tkinter, executing functions over time

+0

ありがとうございます - 私はそれに応じてコードを変更しようとしましたが、新しいエラーです: "AttributeError: 'App'オブジェクトに 'after'属性がありません。上のように - インデントエラーがどこにあるか分かりません。 – Eleshar

+0

私のコメントをチェックしてください質問に追加しました。インデントの問題を修正するために質問が編集されたため、コードのバージョンが質問のコードと正確に一致することを確認してください(修正したコード行を除いて)。 – Xetnus

+0

変更と新しいエラーで編集されました。 – Eleshar

関連する問題