【问题标题】:How to destroy a pygubu window after app.run()?如何在 app.run() 之后销毁 pygubu 窗口?
【发布时间】:2020-04-14 14:32:20
【问题描述】:

我开始使用 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() 函数)?

【问题讨论】:

  • 为什么要销毁app.run()之后的窗口,因为在app.run()之后tkinter根窗口已经被销毁了?顺便说一句,您可以在 HelloWorldApp 类中使用 self.mainwindow.master.destroy()
  • 我不太明白@acw1668。基本上我只是在测试我可以关闭未来程序的窗口,这样我就可以有一个命令通过销毁窗口来结束程序。
  • 由于app.run()实际上是在调用tkinter.mainloop(),所以只有当tkinter根窗口被销毁时,该函数才会返回。这意味着在app.run() 之后,tkinter 根窗口已被破坏。那么为什么要销毁已经销毁的窗口呢?
  • 尽管@acw1668 窗口并没有消失 - 所以这是我的问题
  • app.run()app.after(2800, window.destroy)之前添加

标签: python tkinter destroy pygubu


【解决方案1】:

感谢@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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2011-01-18
    相关资源
    最近更新 更多