当子窗口打开时关闭父窗口
Posted
技术标签:
【中文标题】当子窗口打开时关闭父窗口【英文标题】:Close parent window, when a sub window open 【发布时间】:2012-02-21 17:00:22 【问题描述】:应用程序以登录表单启动,当用户和密码正确时,它会启动主窗口。我无法关闭登录表单(QWidget)。
def on_pushButton_login_clicked(self):
username = str(self.ui.lineEdit_usuario.text())
password = str(self.ui.lineEdit_password.text())
if login_user(username, password):
# Hide error if Login fail
self.ui.label_error.hide()
window = Main() # QMainWindow
try:
window.exec_()
except AttributeError:
pass
#self.close() # close LoginForm & open QMainWindow
else:
self.ui.lineEdit_usuario.setFocus()
self.ui.lineEdit_usuario.clear()
self.ui.lineEdit_password.clear()
# Show error if Login fail
self.ui.label_error.show()
【问题讨论】:
【参考方案1】:如果window
是QMainWindow
实例,则它不会有exec_
方法。但如果是这样,exec_
意味着窗口将是模态的,因此会阻塞,直到用户关闭它。
另一方面,如果你使用 window.show()
来避免阻塞,LoginForm
会自行关闭 - 但是 window
会立即被垃圾收集,因为你没有在任何地方保持对它的引用。
假设LoginForm
是QDialog
,我建议你利用它的accept 插槽,然后重写你的启动代码以像这样工作:
class LoginForm(QDialog):
...
def on_pushButton_login_clicked(self):
username = str(self.ui.lineEdit_usuario.text())
password = str(self.ui.lineEdit_password.text())
if login_user(username, password):
self.accept()
else:
...
app = QtGui.QApplication(sys.argv)
if LoginForm().exec_() == QtGui.QDialog.Accepted:
window = Main()
window.show()
sys.exit(app.exec_())
【讨论】:
以上是关于当子窗口打开时关闭父窗口的主要内容,如果未能解决你的问题,请参考以下文章
请问在PHP中用JS打,关闭子窗口,刷新父窗口,用echo " ";形式,谢了…