bugfix> python > 投稿

次のエラーが表示されます:-

AttributeError: PageOne instance has no attribute 'scann'

bashスクリプト(runfocus)を実行しようとしています。 それでもこのエラーが発生する理由を理解することができません。 私のコードは次のとおりです-

class PageOne(tk.Frame):
    def __init__(self, parent, controller):
        running = False  # Global flag
        tk.Frame.__init__(self, parent)
        self.controller = controller
        button = tk.Button(self, text="Go to the start page",
                           command=lambda: controller.show_frame("StartPage"))
        strt = tk.Button(self, text="Start Scan", command=self.start)
        stp = tk.Button(self, text="Stop", command=self.stop)
        button.pack()       
        strt.pack()
        stp.pack()
        self.after(1000, self.scann)  # After 1 second, call scanning
    def scann(self):
        if running:
          sub.call(['./runfocus'], shell=True)
        self.after(1000, self.scann)
    def start(self):
        """Enable scanning by setting the global flag to True."""
        global running
        running = True
    def stop(self):
        """Stop scanning by setting the global flag to False."""
        global running
        running = False

貴重な提案を提供してください。

回答 1 件
  • AttributeError: PageOne instance has no attribute 'scann' error を再現できません 、しかし、その running のために、スクリプトには他の問題があります  国旗。変更可能なグローバルを使用することは避けてください。すでにクラスを取得している場合は、別のグローバルを使用する必要はまったくありません。フラグとして属性を作成するだけです。

    コードの実行可能な修復バージョンを以下に示します。 sub.call(['./runfocus'], shell=True) を交換しました  簡単な print で呼び出す   start が見えるように呼び出します  および stop  正しく動作します。

    import tkinter as tk
    class PageOne(tk.Frame):
        def __init__(self, parent, controller):
            self.running = False
            tk.Frame.__init__(self, parent)
            self.controller = controller
            button = tk.Button(self, text="Go to the start page",
                               command=lambda: controller.show_frame("StartPage"))
            strt = tk.Button(self, text="Start Scan", command=self.start)
            stp = tk.Button(self, text="Stop", command=self.stop)
            button.pack()
            strt.pack()
            stp.pack()
            self.after(1000, self.scann)  # After 1 second, call scanning
        def scann(self):
            if self.running:
                #sub.call(['./runfocus'], shell=True)
                print("calling runfocus")
            self.after(1000, self.scann)
        def start(self):
            """Enable scanning by setting the flag to True."""
            self.running = True
        def stop(self):
            """Stop scanning by setting the flag to False."""
            self.running = False
    
    root = tk.Tk()
    frame = PageOne(root, root)
    frame.pack()
    root.mainloop()
    
    

あなたの答え