#python #python-3.x #pyqt #pyqt5
#python #python-3.x #pyqt #pyqt5
Вопрос:
Я хочу вызвать a QWidget()
внутри a @classmethod
, чтобы получить параметры для класса из формы Qt:
from PyQt5.QtWidgets import QWidget, QApplication
import sys
class FormDialog(QWidget):
def __init__(self):
QWidget.__init__(self)
super(FormDialog, self).__init__()
print("FormDialog called")
class Files(object):
def __init__(self):
pass
@classmethod
def from_gui(cls):
form = FormDialog()
form.show()
return cls()
if __name__ == '__main__':
app = QApplication(sys.argv)
obj = Files.from_gui() # "FormDialog called" appears, but window doesn't show up
form = FormDialog() # "FormDialog called" appears
form.show() # Window appears
sys.exit(app.exec_())
Если я вызываю FormDialog()
внутри @classmethod
, окно не отображается. Если я вызываю его вне @classmethod
, все работает так, как задумано. Почему?
Ответ №1:
Поместите этот метод в класс FormDialog, чтобы увидеть, что происходит на самом деле
def __del__(self):
print('Deleting the form')
formDialog уничтожается при возврате метода from_gui.
Вы можете решить это с помощью :
-
возвращает форму за пределы from_gui, чтобы она могла находиться вне области from_gui
-
Сделайте FormDialog наследующим QDialog вместо QWidget и используйте exec вместо show, таким образом, диалоговое окно отображается и блокируется, следующая инструкция будет выполнена после того, как диалоговое окно будет уничтожено