Да, дело в то, что ссылка на MainWindow не сохранена.
Очень простое, но не совсем правильное решение:
# --------------------- ниже пытаюсь открыть новое окно ----------------------------
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindowq()
ui.setupUi(MainWindow)
MainWindow.show()
self.second_window = MainWindow
сохраняем ссылку на созданное окно, чтобы оно не удалялось сборщиком мусора и соответственно не закрывалось.
modos189
“Вносить в него изменения нет смысла, файл перезаписывается каждый раз.”
после изменений в QtDesigner я провожу сверку со своей программой и переношу только новое
Это же очень не удобно.
Правильным бы было реорганизовать ваш код, так как советуют в документации (ссылка в предыдущем посте)
Т.е. у вас есть два ui файла, например main_window.ui, second_window.ui
после pyuic они превращаются, допустим, в ui_main_window.py, ui_second_window.py
Весь код программы вы выносите в отдельный файл, например, application.py:
import sys
from PyQt4 import QtCore, QtGui
from ui_main_window import Ui_MainWindow
from ui_second_window import Ui_SecondWindow
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
.....
# функции обработки событий и т.п.
desc(self, QModelIndex):
#.....
second_window = SecondWindow(parent=self) # задаем родителем себя
# или просто сохраняем в себе ссылку на дочернее окно
#self.second_window = SecondWindow()
second_window.show()
class SecondWindow(QtGui.QMainWindow, Ui_SecondWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
# ... возможно функции для обработки нажатий и т.п.
# ... другие функции
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
После этого вы можете спокойно менять интерфейс в QtDesigner и перегенерировать файлы ui_main_window.py, ui_second_window.py. Весь код, будет в application (ну, в простейшем случае).
P.S. Здесь показан вариант со множественным наследованием, зачастую удобнее вариант с сохранением ui в self.ui (см. документацию)
upd: parent не передавался в QtGui.QMainWindow.__init__()