【发布时间】: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