我想在QWidget()
中调用@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
之外调用它,那么一切都会按预期工作。为什么?
答案 0 :(得分:1)
将此方法放在FormDialog类中以查看实际发生的情况
def __del__(self):
print('Deleting the form')
from_gui方法返回时,formDialog被破坏。
您可以使用:
解决它在from_gui之外返回表单,因此它可以不在from_gui范围内
使FormDialog继承QDialog而不是QWidget并使用exec代替show,这样对话框将显示并阻止,对话框销毁后将执行下一条指令