如何在app.run()之后销毁pygubu窗口?

时间:2020-04-14 14:32:20

标签: python tkinter destroy pygubu

我开始使用python和pygubu制作东西(目前还没有IDK)。首先,我一直在探索pygubu可以做什么。我遇到一个问题,但我不知道如何解决。我的问题是我无法破坏窗户。我尝试过:

import time
from time import sleep
import tkinter as tk
import pygubu

def func():
    time.sleep(2.8)
    app.destroy()


class HelloWorldApp:
    global app

    def __init__(self):

        #1: Create a builder
        self.builder = builder = pygubu.Builder()

        #2: Load an ui file
        builder.add_from_file('IDKyet.ui')

        #3: Create the mainwindow
        self.mainwindow = builder.get_object('window')

    def run(self):
        self.mainwindow.mainloop()


if __name__ == '__main__':
    app = HelloWorldApp()
    app.run()
    func()

但是我得到了错误:

Traceback (most recent call last):
  File "C:\Users\tom\Documents\python\In development\I Do Not Know (yet).py", line 42, in <module>
    func()
  File "C:\Users\tom\Documents\python\In development\I Do Not Know (yet).py", line 11, in func
    app.destroy()
AttributeError: 'HelloWorldApp' object has no attribute 'destroy'

所以我尝试了:

import time
from time import sleep
import tkinter as tk
import pygubu

def func():
    time.sleep(2.8)
    window.destroy()

class HelloWorldApp:
    global window

    def __init__(self):

        #1: Create a builder
        self.builder = builder = pygubu.Builder()

        #2: Load an ui file
        builder.add_from_file('IDKyet.ui')

        #3: Create the mainwindow
        self.mainwindow = builder.get_object('window')

    def run(self):
        self.mainwindow.mainloop()


if __name__ == '__main__':
    app = HelloWorldApp()
    app.run()
    func()

基本上,我已将全局变量更改为名为window的父窗口,并将其销毁为window。但是我得到了错误:

Traceback (most recent call last):
  File "C:\Users\tom\Documents\python\In development\I Do Not Know (yet).py", line 42, in <module>
    func()
  File "C:\Users\tom\Documents\python\In development\I Do Not Know (yet).py", line 11, in func
    window.destroy()
NameError: name 'window' is not defined

即使我已将window设置为全局变量。我是pygubu的新手,需要我所能获得的所有帮助。 如何使用pygubu销毁窗口? 注意: 关闭窗口后出现错误。 我将不胜感激任何帮助。 I tried this link but it doesn't help

编辑:

现在我知道在app.run()之后,窗口停止工作/关闭,但是如何使其消失(如tkinter destroy()函数一样)?

1 个答案:

答案 0 :(得分:0)

感谢@stovfl的评论。

app.run()app.after(2800, window.destroy)之前添加

这意味着我可以编辑我的代码,它将起作用:

import time
from time import sleep
import tkinter as tk
import pygubu



class HelloWorldApp:
    global window

    def __init__(self):

        #1: Create a builder
        self.builder = builder = pygubu.Builder()

        #2: Load an ui file
        builder.add_from_file('IDKyet.ui')

        #3: Create the mainwindow
        self.mainwindow = builder.get_object('window')

    def run(self):
        self.mainwindow.mainloop()


if __name__ == '__main__':
    app = HelloWorldApp()
    app.after(2800, window.destroy)
    app.run()
相关问题