修改另一个类中的变量并归档

时间:2017-08-02 18:05:55

标签: python-3.x pyqt5

(非英语原生) 这很难解释。我有2个窗口,每个窗口都有自己的类,由PyQt5创建,在2个不同的.py文件中。我想从第一个窗口内的按钮打开第二个窗口,然后我希望第二个窗口在关闭时自行销毁。但是,为了做到这一点,我相信我必须在第一个窗口中将一个特定变量设置为None,但由于这是实例,我无法找到如何:

myfile.py中的第一个窗口

class MainForm(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.window_nuevocliente = None
        self.actionNuevo_Cliente.triggered.connect(self.open_secondwindow)

    def open_secondwindow(self):
        if self.window_nuevocliente is None:
            self.window_nuevocliente = addnewclient_logic.AddNewClientForm(self)
            self.window_nuevocliente.setAttribute(Qt.WA_DeleteOnClose, True)
        self.window_nuevocliente.show()

myapp = MainForm()

addnewclient_logic.py中的第二个窗口

import myfile

class AddNewClientForm(QtWidgets.QMainWindow, Ui_AddNewClient):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)

    def closeEvent(self, event):
        # Do closing stuff
        event.accept()
        # Set the first class var window_nuevocliente back to None
        myfile.myapp.window_nuevocliente = None

这就是我被困住的地方:

最后一行不起作用。当我关闭窗口时,DeleteOnClose将完全破坏窗口,但第一个窗口仍然会在window_nuevocliente var上分配它,因此无法从头开始重新创建它。如果我省略检查它是否为无,则可以同时打开多次窗口(我不希望这样)。

2 个答案:

答案 0 :(得分:0)

通过添加<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <body ng-app="myApp" ng-controller="myCtrl"> <select ng-model="selectedProdTeam" ng-options="team.name for team in prodTeams | orderBy:'name'" ng-change="getRolesBasedOnSelectedTeamProd()"> <option value="">Select Teams</option> </select> </body>信号来管理修复它。

destroyed

我会接受一个更好的解决方案:P

答案 1 :(得分:0)

您可以删除window_nuevocliente这样的属性:

addnewclient_logic.py

class AddNewClientForm(QtWidgets.QMainWindow, Ui_AddNewClient):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
        self.setupUi(self)

myfile.py

from addnewclient_logic import AddNewClientForm

class MainForm(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.actionNuevo_Cliente.triggered.connect(self.open_secondwindow)

    def open_secondwindow(self):
        window_nuevocliente = self.findChild(AddNewClientForm)
        if window_nuevocliente is None:
            window_nuevocliente = AddNewClientForm(self)
        window_nuevocliente.show()

父窗口将保存对子窗口的引用,直到它在关闭时自行删除 - 此时,它也将从父窗口的子窗口中删除。