Tkinter windows 弹出但无法关闭它们
Tkinter windows popping up and not able to close them
我有一个 tkinter GUI python 代码,它为我的代码创建一个 gui 界面,在代码中稍后使用了小吃声音工具包(它也使用 Tk 并使用 root = Tk() 创建一个实例) .因为,以前的 GUI 应用程序的主循环已经 运行 每次调用小吃功能时都会弹出一个新的空默认 tk window。由于这种情况经常发生,所以当这段代码执行时,屏幕上会出现数百个空的 tk windows。我曾尝试使用多种方法关闭它们 root.destroy、root.withdraw、WM_DELETE_WINDOW 等,但没有解决方案。
有什么方法可以在 tkinter 中完成吗?
import tkSnack
import thread
import Tkinter as tk
class my_gui(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.button = tk.Button(self, text="Get", command=self.on_button)
self.button.grid(row=8)
def on_button(self):
thread1 = thread.start_new_thread(run, (PATH_TO_WAVE_FILE,))
def run(path):
for k in range(10):
PITCH_VALUES = snack_work(path)
print PITCH_VALUES
def snack_work(INPUT_WAVE_FILE):
# initializing the snack tool
root = tk.Tk()
tkSnack.initializeSnack(root)
# root.withdraw()
mysound = tkSnack.Sound()
# processing original wave file
mysound.read(INPUT_WAVE_FILE)
PITCH_VALUES = mysound.pitch()
return PITCH_VALUES
app = my_gui()
app.mainloop()
将 run()
和 snack_work()
设为 app
对象的实例方法,以便它们可以轻松访问该对象的属性。为了使用不依赖外部库或文件的更小的 MCVE,我使用简单的 print()
(我在 Python 3)和 after()
调用而不是snack
东西,因为我只想检查其他函数是否可以访问 tkinter
对象。
import tkSnack
import thread
import Tkinter as tk
class my_gui(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.button = tk.Button(self, text="Get", command=self.on_button)
self.button.grid(row=8)
def on_button(self):
thread1=thread.start_new_thread(self.run,(PATH_TO_WAVE_FILE,))
def run(self, path):
for k in range(10):
PITCH_VALUES = self.snack_work(path)
print PITCH_VALUES
def snack_work(self, INPUT_WAVE_FILE):
## initializing the snack tool
tkSnack.initializeSnack(self) # use self instead of the separate root object
# self.withdraw()
mysound=tkSnack.Sound()
## processing original wave file
mysound.read(INPUT_WAVE_FILE)
PITCH_VALUES= mysound.pitch()
return PITCH_VALUES
app = my_gui()
app.mainloop()
我有一个 tkinter GUI python 代码,它为我的代码创建一个 gui 界面,在代码中稍后使用了小吃声音工具包(它也使用 Tk 并使用 root = Tk() 创建一个实例) .因为,以前的 GUI 应用程序的主循环已经 运行 每次调用小吃功能时都会弹出一个新的空默认 tk window。由于这种情况经常发生,所以当这段代码执行时,屏幕上会出现数百个空的 tk windows。我曾尝试使用多种方法关闭它们 root.destroy、root.withdraw、WM_DELETE_WINDOW 等,但没有解决方案。 有什么方法可以在 tkinter 中完成吗?
import tkSnack
import thread
import Tkinter as tk
class my_gui(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.button = tk.Button(self, text="Get", command=self.on_button)
self.button.grid(row=8)
def on_button(self):
thread1 = thread.start_new_thread(run, (PATH_TO_WAVE_FILE,))
def run(path):
for k in range(10):
PITCH_VALUES = snack_work(path)
print PITCH_VALUES
def snack_work(INPUT_WAVE_FILE):
# initializing the snack tool
root = tk.Tk()
tkSnack.initializeSnack(root)
# root.withdraw()
mysound = tkSnack.Sound()
# processing original wave file
mysound.read(INPUT_WAVE_FILE)
PITCH_VALUES = mysound.pitch()
return PITCH_VALUES
app = my_gui()
app.mainloop()
将 run()
和 snack_work()
设为 app
对象的实例方法,以便它们可以轻松访问该对象的属性。为了使用不依赖外部库或文件的更小的 MCVE,我使用简单的 print()
(我在 Python 3)和 after()
调用而不是snack
东西,因为我只想检查其他函数是否可以访问 tkinter
对象。
import tkSnack
import thread
import Tkinter as tk
class my_gui(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.button = tk.Button(self, text="Get", command=self.on_button)
self.button.grid(row=8)
def on_button(self):
thread1=thread.start_new_thread(self.run,(PATH_TO_WAVE_FILE,))
def run(self, path):
for k in range(10):
PITCH_VALUES = self.snack_work(path)
print PITCH_VALUES
def snack_work(self, INPUT_WAVE_FILE):
## initializing the snack tool
tkSnack.initializeSnack(self) # use self instead of the separate root object
# self.withdraw()
mysound=tkSnack.Sound()
## processing original wave file
mysound.read(INPUT_WAVE_FILE)
PITCH_VALUES= mysound.pitch()
return PITCH_VALUES
app = my_gui()
app.mainloop()