Как уничтожить окно pygubu после app.run ()? - PullRequest
0 голосов
/ 14 апреля 2020

Я начинаю что-то делать (IDK еще), используя python и pygubu. Для начала я изучал, что вы можете сделать с 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? ПРИМЕЧАНИЕ: Ошибка появляется после закрытия окна. Буду признателен за любую помощь. Я попробовал эту ссылку, но она не помогает .

Редактировать:

Теперь я знаю, что после app.run() окно перестает работать / закрывается, но как вы делаете он исчезает (как функция tkinter destroy())?

1 Ответ

0 голосов
/ 23 апреля 2020

Благодаря комментарию @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()
...