Я пытаюсь создать простую программу с использованием PyQt5 с FBS-фреймворком для ее развертывания. Я успешно создал несколько окон QMainWindow, которые открываются при нажатии кнопки. Но у меня есть проблема при закрытии программы с помощью кнопки X Close, я думаю, потому что обработчик выбрал неправильное MainWindow или ответ не идет в правильном направлении.
Это текущая ошибка (FBS Run не полностьюЗакрыто):
Я пытаюсь преобразовать QMainWindow в QWidget, но этот подход неудачен.
Вот примеркод каждой функции.
Main.py
# Application
class AppContext(ApplicationContext):
def run(self):
controller = Control.Controller()
controller.show_MainWindow()
return self.app.exec_()
# Main Application
if __name__ == '__main__':
appctxt = AppContext()
exit_code = appctxt.run()
sys.exit(exit_code)
Controller.py
class Controller():
def __init__(self):
pass
def show_MainWindow(self):
self._MainWindow = MW.MainWindow()
self._MainWindow.switch_window.connect(self.change_InputWindows)
self._MainWindow.show()
def change_InputWindows(self, text):
if(text == "ICW"):
self._ICWWindow = ICW.IronCathWindowLay()
self._ICWWindow.switch_window.connect(self.change_OutputWindows)
self._MainWindow.close()
self._ICWWindow.show()
elif(text == "SCW"):
self._SCWWindow = SCW.SteelCathWindowLay()
self._SCWWindow.switch_window.connect(self.change_OutputWindows)
self._MainWindow.close()
self._SCWWindow.show()
elif(text == "ITW"):
self._ITWWindow = ITW.IronThicWindowLay()
self._ITWWindow.switch_window.connect(self.change_OutputWindows)
self._MainWindow.close()
self._ITWWindow.show()
elif(text == "STW"):
self._STWWindow = STW.SteelThicWindowLay()
self._STWWindow.switch_window.connect(self.change_OutputWindows)
self._MainWindow.close()
self._STWWindow.show()
def change_OutputWindows(self, text):
if(text == "HICW"):
self._ICWWindow.close()
self.show_MainWindow()
elif(text == "HSCW"):
self._SCWWindow.close()
self.show_MainWindow()
elif(text == "HITW"):
self._ITWWindow.close()
self.show_MainWindow()
elif(text == "HSTW"):
self._STWWindow.close()
self.show_MainWindow()
MainWindow.py
class MainWindow(QMainWindow):
switch_window = QtCore.pyqtSignal(str)
# Main Window
def __init__(self):
super(MainWindow, self).__init__()
loadUi(ApplicationContext().get_resource('MainLayout.ui'), self)
# Button Handler
self.ironCathodicButton.clicked.connect(self.createICW)
self.ironThicknessButton.clicked.connect(self.createITW)
self.steelCathodicButton.clicked.connect(self.createSCW)
self.steelThicknessButton.clicked.connect(self.createSTW)
# Button Function
@pyqtSlot()
def createICW(self):
self.switch_window.emit("ICW")
@pyqtSlot()
def createITW(self):
self.switch_window.emit("ITW")
@pyqtSlot()
def createSCW(self):
self.switch_window.emit("SCW")
@pyqtSlot()
def createSTW(self):
self.switch_window.emit("STW")
IronCathWindow.py
class IronCathWindowLay(QMainWindow):
switch_window = QtCore.pyqtSignal(str)
# ICW Window
def __init__(self):
super(IronCathWindowLay, self).__init__()
loadUi(ApplicationContext().get_resource('IronCathLayout.ui'), self)
# Button Handler
self.HomeButton.clicked.connect(self.goHome)
@pyqtSlot()
def goHome(self):
self.switch_window.emit("HICW")
Вот репозиторий для полного кода: https://github.com/oracl4/Weaver
Я ожидаю, что когда любое открытое окно закрывается, программа закрывается полностью без зависания.