沒有搞清楚原因,僅記錄解決過程:
在數據庫實驗中,用QT designer創建了一個MainWindow,需要在插入操作捕獲到mysql異常后輸出提示信息(不是點擊按鈕事件),直接調用QMessageBox.critical(self, 'Error', str(err))
程序會閃退,並且沒有顯示提示。在網上看到一個說法是QT designer創建的MainWindow不是一個QtWidget(我之前是直接在QT designer創建的類里寫的代碼),而QMessageBox.xxx(self, , )中的self要求是一個QtWidget,因此最好再定義一個類繼承QtWidget.QMainWindow
和Ui_MainWindow
,這樣修改之后問題就解決了
class Ui_MainWindow(object):... # QT designer生成的代碼,不做改動
# 新定義MainWindow類
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, *args, **kwargs):
QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
self.setupUi(self)
# 以下是自己添加的代碼 不貼上來了
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ui = MainWindow()
ui.setWindowTitle('學生公寓管理系統')
ui.show()
sys.exit(app.exec_())
再遇到QMessageBox.information()
時便可成功執行
參考鏈接