python - PyQt 应用程序在第二次调用错误消息时崩溃
问题描述
上下文: 我正在使用 QtDesigner 和 PyCharm 创建一个 GUI。当主窗口 (win1) 通过 QPushButton 调用第二个窗口 (win2),然后由于缺少用户输入而打开错误消息时,就会出现我遇到的问题。我正在使用外部文件(main.py)来处理所有窗口的逻辑和事件,而不是编辑 QtDesigner 生成的代码。
问题: 我设置的方式,用户需要从组合框中选择一个选项,根据用户的选择,应用程序启动 win2 或 win3
用户从组合框中选择没有选项 --> 错误消息
用户选择选项 1 --> win2 打开,win1 关闭
用户选择选项 2 --> win3 打开,win1 关闭
用户退出 win 2/3 并返回 win1 后出现问题
用户选择选项 1/2 --> 正确的窗口打开,没有问题
用户没有选择选项 --> 错误消息 --> 用户关闭错误消息 --> 崩溃(或突然的应用程序退出)
注意:崩溃不会产生错误/警告
这是我用来处理打开/关闭的代码:
class win1(QtGui.QMainWindow, pg1.Ui_MainWindow):
def __init__(self, parent=None):
super(win1, self).__init__(parent)
self.setupUi(self)
self.btn1.clicked.connect(self.checkuserselection)
self.addnew = win2(self)
def checkuserselection(self):
user_str = str(self.comboBox.currentText())
if user_str == "Select Option":
self.errMsg()
elif user_str == "Option 1":
self.runaddnew("Window title for option 1")
else:
self.runaddnew("window title for option 2")
def runaddnew(self, title):
self.addnew.setWindowTitle(title)
self.addnew.show()
self.hide()
@staticmethod
def errMsg():
w = QtGui.QMessageBox()
QtGui.QMessageBox.critical(w, "No Option Selected!")
win2的代码:
class win2(QtGui.QMainWindow, pg2.Ui_MainWindow):
def __init__(self, parent=None):
super(win2, self).__init__(parent)
self.setupUi(self)
self.actionExit.triggered.connect(self.closeWindow)
def closeWindow(self):
self.close()
w = win1(self)
w.show()
用户可以多次收到错误消息而不会突然退出应用程序,只要他们没有打开其他窗口之一。这使我认为问题出在win2中的closeWindow方法上。我在 python/pyQt 方面的知识有限,所以我不知道这是否确实是问题所在。
解决方案
感谢@ekhumoro,我在这里发布了有效的回复,以防其他人遇到这个问题。
在win2的代码中:
def closeWindow(self):
self.parent().show()
self.close()
这是因为在创建 win2 时 win1 将 self 传递给了 win2
推荐阅读
- prolog - DCG 能够读取命题逻辑表达式
- swift - 无效的 Swift 入口点数据
- apache-spark - Spark结构化流中的按键水印
- c# - Unity 中使用 Mirror 的地图/战斗系统(类似于 Dofus)
- android - 为什么调用 getDrawable 时出现 java.lang.NoClassDefFoundError?
- javascript - 如何修复 Visual Studio 代码中未找到模块?
- jquery - 我的文本框中选定的文本不是我所期望的
- applescript - 您如何检查 Applescript 中的对象属性?
- r - 无法在 R Studio 中更改目录...oneDrive 出现问题
- reactjs - Material-ui 背景不覆盖按钮和其他元素