上下文 我正在使用QtDesigner和PyCharm创建GUI。当主窗口(win1)通过QPushButton调用第二个窗口(win2),然后由于缺少用户输入而打开错误消息时,我遇到的问题就出现了。我使用外部文件(main.py)来处理所有窗口的逻辑和事件,而不是编辑QtDesigner生成的代码。
问题: 我设置的方式,用户需要从组合框中选择一个选项,根据用户的选择,应用程序启动win2或win3
用户从comboBox中选择无选项 - >错误信息
用户选择选项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的了解是有限的,所以我不知道这是否确实存在问题。
答案 0 :(得分:1)
感谢@ekhumoro,我发布了此处有效的回复,以防其他人遇到此问题。
在win2的代码中:
def closeWindow(self):
self.parent().show()
self.close()
这是有效的,因为win1在创建win2时将self传递给win2