Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 05.12.2019
Сообщений: 13

Почему окно не закрывается?

11.01.2020, 13:48. Показов 1913. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
при достижении нужного числа в an_window. Окно с загрузкой должно закрыться, но этого не происходит. Почему?

вот часть кода:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class An_class(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(An_class, self).__init__(parent)
        self.i = 0
    def an_start(self):
        global on_off
        if on_off == 0:                     
            on_off = on_off + 1
            self.animation()
            print(on_off)
    def animation(self):
        self.label1 = QtWidgets.QLabel(
            text="Пожалуйста, подождите, \nпрограмма запускается",
            font=QtGui.QFont("Times", 20, weight=QtGui.QFont.Bold)
        )
        self.label2 = QtWidgets.QLabel(alignment=QtCore.Qt.AlignCenter) 
        vbox = QtWidgets.QVBoxLayout(self)
        vbox.addWidget(self.label1)
        vbox.addWidget(self.label2)
        self.show_gif()
    @QtCore.pyqtSlot()
    def show_gif(self):
        movie = QtGui.QMovie(
            "C:/for cheacher/3_mate_files/load.gif",                
            parent=self
        )
        self.label2.setMovie(movie)
        movie.start()
        self.show()
 
        self.timer = QtCore.QTimer(interval=1000)
        self.timer.timeout.connect(self.an_window)
        self.timer.start()
        self.an_window()
 
    def an_window(self):
 
        self.count_max = random.randint(3, 10)
 
        if self.i < count_max:
            self.i += 1
        else:
            self.close_An = GifDialog()
            self.close_An.close_An_class()
 
 
class GifDialog(QtWidgets.QDialog):
    def __init__(self, parent = None):
        super(GifDialog, self).__init__(parent)
    def close_An_class(self):
        self.an = An_class()
        self.an.hide()
        print("Вроде должно закрыться")
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2020, 13:48
Ответы с готовыми решениями:

Не закрывается окно
Всем доброго времени суток! Столкнулся с проблемой, а сам понять не могу почему окно не закрывается (точнее закрывается но сразу же...

Закрывается второе окно
Я привязал открытие второго окна на кнопку, но когда нажимаешь на кнопку окно создается на доли секунды и тут же закрывается, что делать? ...

PyCharm + Qt Designer: моментально закрывается окно
Первый день пытаюсь разобраться с GUI. Проблема в том, что моментально закрывается (или вообще не открывается) окно при запуске в...

1
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
11.01.2020, 20:31
Лучший ответ Сообщение было отмечено 55778441 как решение

Решение

Судя по Вашему коду, Вы в классе GifDialog создаете экземпляр класса An_class и его же скрываете. При этом у вас открыт в процедуре show_gif другой экземпляр класса An_class. Весь код не анализирую, но в процедуре an_window по-моему надо просто self.close() использовать. Непонятно вообще назначение класса GifDialog.

Добавлено через 22 минуты
Еще вот здесь:
Цитата Сообщение от 55778441 Посмотреть сообщение
self.count_max = random.randint(3, 10)
if self.i < count_max:
Вы определяете переменную self.count_max, а используете count_max. Разница, надеюсь понятна?

Поправил Ваш код, работает так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from PyQt5 import QtWidgets, QtGui, QtCore
import sys, random
 
class An_class(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(An_class, self).__init__(parent)
        self.i = 0
    def an_start(self):
        #global on_off
        #if on_off == 0:                     
            #on_off = on_off + 1
        self.animation()
            #print(on_off)
    def animation(self):
        self.label1 = QtWidgets.QLabel(
            text="Пожалуйста, подождите, \nпрограмма запускается",
            font=QtGui.QFont("Times", 20, weight=QtGui.QFont.Bold)
        )
        self.label2 = QtWidgets.QLabel(alignment=QtCore.Qt.AlignCenter) 
        vbox = QtWidgets.QVBoxLayout(self)
        vbox.addWidget(self.label1)
        vbox.addWidget(self.label2)
        self.setLayout (vbox)
        self.show_gif()
    @QtCore.pyqtSlot()
    def show_gif(self):
#        movie = QtGui.QMovie(
#            "C:/for cheacher/3_mate_files/load.gif",                
#            parent=self
#        )
#        self.label2.setMovie(movie)
#        movie.start()
        #self.show()
 
        self.timer = QtCore.QTimer(interval=1000)
        self.timer.timeout.connect(self.an_window)
        self.timer.start()
        self.an_window()
 
    def an_window(self):
 
        self.count_max = random.randint(3, 10)
 
        if self.i < self.count_max:
            self.i += 1
            self.label2.setText (str(self.i))
        else:
            self.close()
            #self.close_An = GifDialog()
            #self.close_An.close_An_class()
 
 
#class GifDialog(QtWidgets.QDialog):
#    def __init__(self, parent = None):
#        super(GifDialog, self).__init__(parent)
#    def close_An_class(self):
#        self.an = An_class()
#        self.an.hide()
#        print("Вроде должно закрыться")
 
app = QtWidgets.QApplication (sys.argv)
MW = An_class()
MW.show ()
MW.an_start()
sys.exit(app.exec_())
Добавлено через 22 минуты
Или так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from PyQt5 import QtWidgets, QtGui, QtCore
import sys, random
 
class An_class(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(An_class, self).__init__(parent)
        self.i = 0
    def an_start(self):
        #global on_off
        #if on_off == 0:                     
            #on_off = on_off + 1
        self.animation()
            #print(on_off)
    def animation(self):
        self.label1 = QtWidgets.QLabel(
            text="Пожалуйста, подождите, \nпрограмма запускается",
            font=QtGui.QFont("Times", 20, weight=QtGui.QFont.Bold)
        )
        self.label2 = QtWidgets.QLabel(alignment=QtCore.Qt.AlignCenter) 
        self.vbox = QtWidgets.QVBoxLayout(self)
        self.vbox.addWidget(self.label1)
        self.vbox.addWidget(self.label2)
        self.setLayout (self.vbox)
        self.show_gif()
    @QtCore.pyqtSlot()
    def show_gif(self):
#        movie = QtGui.QMovie(
#            "C:/for cheacher/3_mate_files/load.gif",                
#            parent=self
#        )
#        self.label2.setMovie(movie)
#        movie.start()
        #self.show()
 
        self.timer = QtCore.QTimer(interval=1000)
        self.timer.timeout.connect(self.an_window)
        self.timer.start()
        self.an_window()
 
    def an_window(self):
 
        self.count_max = random.randint(3, 10)
 
        if self.i < self.count_max:
            self.i += 1
            self.label2.setText (str(self.i))
        else:
            self.close()
            #self.close_An = GifDialog()
            #self.close_An.close_An_class()
 
 
class GifDialog(QtWidgets.QDialog):
    def __init__(self, parent = None):
        super(GifDialog, self).__init__(parent)
    def close_An_class(self):
        self.an = An_class()
        self.an.show()
        self.an.an_start()
        #self.an.hide()
        print("Вроде должно закрыться")
 
app = QtWidgets.QApplication (sys.argv)
MW = GifDialog()
MW.close_An_class()
sys.exit(app.exec_())
Хотя это извращение по-моему. Не буду утверждать, не зная целей )))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2020, 20:31
Помогаю со студенческими работами здесь

Окно в программе открывается и закрывается очень быстро. Что делать?
при выполнении вот этого кода: ... class An_class(QtWidgets.QWidget): def __init__(self, parent=None): ...

Почему закрывается окно при нажатии Enter в файле *.exe?
Файл имеет код: os = input ('ваше имя?\n') print('Привет, %s.' % os) Но после ввода имени и нажатия Enter окно программы закрывается,...

Не закрывается окно после нажатия на кнопку
from tkinter import * import os as os def Vibor(): vibor = Toplevel() vibor.title(&quot;Подбор машин&quot;) ...

Почему не закрывается окно
Почему не закрывается окно при Left=-600 ? //--------------------------------------------------------------------------- #include...

Почему не закрывается окно?
Программа рабочая, но почему-то не хотят закрываться окна.Подскажите где ошибка. import java.util.*; import java.awt.*; import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru