由 Tkinter 按钮触发并由另一个按钮结束的循环
Loop triggered by Tkinter button and ended by another
下面的代码将显示一个小的 Tkinter 用户界面,但是我的按钮不会触发名为 copy_loop 的循环。我已经尝试了几个小时,但我不知道如何解决这个问题。任何帮助将不胜感激。
import tkinter as tk
import threading
class App():
def __init__(self, master):
self.isrunning = False
self.button1 = tk.Button(main, text='start')
self.button1.bind = ("<Button-1>", self.startrunning)
self.button1.pack()
self.button2 = tk.Button(main, text='stop')
self.button2.bind = ("<Button-1>", self.stoprunning)
self.button2.pack()
def startrunning(self, event):
self.isrunning = True
t = threading.Thread(target=self.copy_loop)
t.start()
def stoprunning(self, event):
self.isrunning = False
def copy_loop(self):
while self.isrunning:
print("Running...")
main = tk.Tk()
app = App(main)
main.mainloop()
你有一个不应该有的等号。命令应该是:
self.button1 = tk.Button(main, text='start')
self.button1.bind("<Button-1>", self.startrunning)
或者更整洁:
self.button1 = tk.Button(main, text='start', command=self.startrunning)
你的方法签名应该有 event=None
:
def startrunning(self, event=None):
或者更灵活:
def startrunning(self, *args):
bind
是函数,不是属性。你在哪里:
self.button1.bind = ("<Button-1>", self.startrunning)
您实际上是在覆盖您实例上的bind
函数。它现在是一个元组。
相反,执行:
self.button1.bind("<Button-1>", self.startrunning)
button2
.
也是如此
下面的代码将显示一个小的 Tkinter 用户界面,但是我的按钮不会触发名为 copy_loop 的循环。我已经尝试了几个小时,但我不知道如何解决这个问题。任何帮助将不胜感激。
import tkinter as tk
import threading
class App():
def __init__(self, master):
self.isrunning = False
self.button1 = tk.Button(main, text='start')
self.button1.bind = ("<Button-1>", self.startrunning)
self.button1.pack()
self.button2 = tk.Button(main, text='stop')
self.button2.bind = ("<Button-1>", self.stoprunning)
self.button2.pack()
def startrunning(self, event):
self.isrunning = True
t = threading.Thread(target=self.copy_loop)
t.start()
def stoprunning(self, event):
self.isrunning = False
def copy_loop(self):
while self.isrunning:
print("Running...")
main = tk.Tk()
app = App(main)
main.mainloop()
你有一个不应该有的等号。命令应该是:
self.button1 = tk.Button(main, text='start')
self.button1.bind("<Button-1>", self.startrunning)
或者更整洁:
self.button1 = tk.Button(main, text='start', command=self.startrunning)
你的方法签名应该有 event=None
:
def startrunning(self, event=None):
或者更灵活:
def startrunning(self, *args):
bind
是函数,不是属性。你在哪里:
self.button1.bind = ("<Button-1>", self.startrunning)
您实际上是在覆盖您实例上的bind
函数。它现在是一个元组。
相反,执行:
self.button1.bind("<Button-1>", self.startrunning)
button2
.