Я не могу воспроизвести 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()