(非英语原生) 这很难解释。我有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上分配它,因此无法从头开始重新创建它。如果我省略检查它是否为无,则可以同时打开多次窗口(我不希望这样)。
答案 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()
父窗口将保存对子窗口的引用,直到它在关闭时自行删除 - 此时,它也将从父窗口的子窗口中删除。