|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 影-死神 于 2018-9-10 22:57 编辑
简单来说,就是在主窗口通过按钮打开一个继承自对话框的子窗口,然后将实现在子窗口中实现两个按钮。
其中一个按钮连接self.closeEvent方法,当点击此按钮时,子窗口关闭的同时,主窗口也关闭了,怎样才能只关闭子窗口?
另外,我在尝试解决这个问题时,还发现了两个问题,已在代码中说明,希望大神能够解答!
代码如下:
- import sys
- from PyQt5.QtWidgets import QWidget, QApplication, QDialog, QPushButton, QHBoxLayout
- class Example(QWidget):
- def __init__(self):
- super().__init__()
- self.initUI()
- def initUI(self):
- button = QPushButton("打开对话框", self)
- button.clicked.connect(self.open_dialog)
- self.show()
- def open_dialog(self):
- MyDialog()
- class MyDialog(QDialog):
- def __init__(self):
- super().__init__()
- self.initUI()
- def initUI(self):
- ok_button = QPushButton("确认", self)
- ok_button.clicked.connect(self.ok)
- # 问题一:点击“取消”按钮后,主窗口也关闭了
- # 问题二:注释掉下面第二句时,窗口只是一闪而过
- # 问题三:使用connect连接的函数中出现异常时,不显示异常信息,只是退出程序
- cancel_button = QPushButton("取消", self)
- cancel_button.clicked.connect(self.closeEvent)
- # 设置水平布局
- hbox = QHBoxLayout()
- hbox.addWidget(ok_button)
- hbox.addWidget(cancel_button)
- self.setLayout(hbox)
- self.show()
- def ok(self):
- print("ok")
-
-
- app = QApplication(sys.argv)
- ex = Example()
- sys.exit(app.exec_())
复制代码
一闪而过是正确的,点击取消Python会让你关闭运行程序
pyqt很多错误是不报错的,直接关闭
这种一般是有逻辑错误,他不负责自动检测
cancel点击触发的应该是关闭动作,而不是关闭事件
子窗口推荐如下写法
- import sys
- from PyQt5.QtWidgets import QWidget, QApplication, QDialog, QPushButton, QHBoxLayout
- class Example(QWidget):
- def __init__(self):
- super().__init__()
- self.button = QPushButton("打开对话框", self)
- self.show()
- class MyDialog(QDialog):
- def __init__(self):
- super().__init__()
- self.initUI()
- def initUI(self):
- ok_button = QPushButton("确认", self)
- ok_button.clicked.connect(self.ok)
- # 问题一:点击“取消”按钮后,主窗口也关闭了
- # 问题二:注释掉下面第二句时,窗口只是一闪而过
- # 问题三:使用connect连接的函数中出现异常时,不显示异常信息,只是退出程序
- cancel_button = QPushButton("取消", self)
- cancel_button.clicked.connect(self.close)
- # 设置水平布局
- hbox = QHBoxLayout()
- hbox.addWidget(ok_button)
- hbox.addWidget(cancel_button)
- self.setLayout(hbox)
- def ok(self):
- print("ok")
-
-
- app = QApplication(sys.argv)
- ex = Example()
- a=MyDialog()
- ex.button.clicked.connect(a.show)
- sys.exit(app.exec_())
复制代码
|
|