当前位置: 首页 > 知识库问答 >
问题:

Tkinter窗口弹出,无法关闭它们

谷梁振
2023-03-14

我有一个tkinter GUI python代码,它为我的代码创建了一个GUI接口,在稍后的代码中使用了声音工具包(它也使用Tk,并使用root=Tk()创建了一个实例)。因为,以前GUI应用程序的主循环已经在运行,所以每当调用snack函数时,就会弹出一个新的空默认tk窗口。由于这种情况经常发生,所以当代码执行时,屏幕上有数百个空tk窗口。我曾尝试使用多种方法关闭它们。毁灭,根。撤消、WM_删除_窗口等,但没有解决方案。在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()

共有1个答案

有品
2023-03-14

使run()snack\u 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()
 类似资料:
  • 所以我只是想知道是否有人知道在JavaFX 8中关闭弹出窗口的正确方法。例如,如果我的弹出窗口上有一个取消按钮,当按下取消按钮时,我应该使用什么方法来摆脱弹出窗口?我目前只是使用隐藏()方法。这让我有点害怕,因为我不确定弹出窗口是否在后台某处徘徊并且仍然需要关闭。但是,当我在这里查看java文档时,我没有看到任何关闭()方法,我也没有在我的IDE自动完成中看到关闭()方法。不过,我确实在文档中看到

  • 我有这段代码显示了一个按钮谁显示一个弹出窗口,我希望用户能够关闭弹出窗口点击它的外部时,它是打开的。

  • 问题内容: 我通过window.open打开了一个弹出窗口。使用JavaScript打开,我想在关闭此弹出窗口时刷新父页面。(onclose事件?)我该怎么办? 问题答案: 您可以使用“ window.opener”访问父窗口,因此,在子窗口中编写如下内容:

  • 问题内容: 我在JPopupMenu中有一个JComboBox(以及其他组件)。事实证明,每当我打开组合框的弹出窗口(以选择一个项目)时,父级JPopupMenu都会关闭。我一直在尝试找到一种方法来覆盖此功能,但无济于事。 有没有人建议防止关闭父级JPopupMenu?谢谢! 问题答案: 这不可能直接实现,很难覆盖已知的错误,另一方面,Swing不允许同时使用两个lightwieght弹出组件 但

  • 我正在为Facebook编写一个代码,它从属性文件中获取URL、ID、密码,但在登录时,我会被提示“Facebook想要显示通知-允许-阻止”,在登录后我该如何使其如此(a)按ESP或Alt+F4并关闭弹出窗口或(B)查找通知并自行关闭通知。这是我使用的,但它不起作用。感谢任何帮助。

  • 我正试图打开一个弹出身份验证对话框的ftp页面。我正在使用Robot类的Keypress事件输入身份验证细节。但是在这里,如果焦点不在那个弹出窗口上,那么它在另一个处于焦点中的窗口中键入身份验证详细信息。由于这个弹出窗口不是web元素,我不能使用driver.switchto().window(),因为这里我需要传递windowhandle,我没有得到它。如果我可以点击驱动程序窗口,我的焦点将转移