Я начинаю что-то делать (пока еще 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())?

0
Thomas Kerby 14 Апр 2020 в 17:32

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()
0
TXOG 23 Апр 2020 в 13:34