样例1 函数绑定触发关闭
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget, QVBoxLayout, QLabel class TaskCreationWindow(QWidget): def __init__(self, on_close_callback): super().__init__() self.setWindowTitle("任务创作界面") self.setGeometry(100, 100, 500, 500) layout = QVBoxLayout() layout.addWidget(QLabel("这是任务创作界面")) self.setLayout(layout) self.on_close_callback = on_close_callback def closeEvent(self, event): self.on_close_callback() event.accept() class ServerWindow(QWidget): def __init__(self, on_close_callback): super().__init__() self.setWindowTitle("服务器界面") self.setGeometry(100, 100, 500, 500) layout = QVBoxLayout() layout.addWidget(QLabel("这是服务器界面")) self.setLayout(layout) self.on_close_callback = on_close_callback def closeEvent(self, event): self.on_close_callback() event.accept() class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("服务器控制端") self.setGeometry(100, 100, 500, 500) self.task_window = None self.server_window = None central_widget = QWidget() self.setCentralWidget(central_widget) layout = QVBoxLayout() self.task_button = QPushButton("打开任务创作界面") self.task_button.clicked.connect(self.open_task_window) layout.addWidget(self.task_button) self.server_button = QPushButton("打开服务器界面") self.server_button.clicked.connect(self.open_server_window) layout.addWidget(self.server_button) central_widget.setLayout(layout) def open_task_window(self): if self.task_window is None: self.task_window = TaskCreationWindow(self.on_task_window_closed) self.task_window.show() else: self.task_window.raise_() def open_server_window(self): if self.server_window is None: self.server_window = ServerWindow(self.on_server_window_closed) self.server_window.show() else: self.server_window.raise_() def on_task_window_closed(self): self.task_window = None def on_server_window_closed(self): self.server_window = None if __name__ == "__main__": app = QApplication(sys.argv) main_window = MainWindow() main_window.show() sys.exit(app.exec_())
样例2 共享内存
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget, QVBoxLayout, QLabel from API_tcp_sever_ui import * from API_sever_setJson_ui import * class TaskCreationWindow(QWidget): #def __init__(self, on_close_callback): def __init__(self,ShareDatas,lock_): super().__init__() self.ShareDatas_=ShareDatas self.lock_=lock_ self.ShareDatas_[1]=1 # 窗口打开标志位 super().__init__() self.setWindowTitle("任务创作界面") self.setGeometry(100, 100, 500, 500) layout = QVBoxLayout() layout.addWidget(QLabel("这是任务创作界面")) self.setLayout(layout) #self.on_close_callback = on_close_callback def closeEvent(self, event): #self.on_close_callback() self.ShareDatas_[1]=0 # 窗口打开标志位 event.accept() class ServerWindow(QWidget): #def __init__(self, on_close_callback): def __init__(self,ShareDatas,lock_): super().__init__() self.ShareDatas_=ShareDatas self.lock_=lock_ self.ShareDatas_[2]=1 # 窗口打开标志位 self.setWindowTitle("服务器界面") self.setGeometry(100, 100, 500, 500) layout = QVBoxLayout() layout.addWidget(QLabel("这是服务器界面")) self.setLayout(layout) #self.on_close_callback = on_close_callback def closeEvent(self, event): #self.on_close_callback() self.ShareDatas_[2]=0 # 窗口打开标志位 event.accept() class MainWindow(QMainWindow): def __init__(self,ShareDatas_,lock_): super().__init__() self.ShareDatas_=ShareDatas_ self.lock_=lock_ self.setWindowTitle("服务器控制端") self.setGeometry(100, 100, 500, 500) self.task_window = None self.server_window = None central_widget = QWidget() self.setCentralWidget(central_widget) layout = QVBoxLayout() self.task_button = QPushButton("打开任务创作界面") self.task_button.clicked.connect(self.open_task_window) layout.addWidget(self.task_button) self.server_button = QPushButton("打开服务器界面") self.server_button.clicked.connect(self.open_server_window) layout.addWidget(self.server_button) central_widget.setLayout(layout) def open_task_window(self): if self.ShareDatas_[2]==0: # self.task_window = TaskCreationWindow(self.on_task_window_closed) # self.task_window.show() self.task_window = Clinet_UI_MAIN(self.ShareDatas_,self.lock_) self.task_window.show() self.ShareDatas_[2]=1 else: self.task_window.raise_()# 窗口至于上层 def open_server_window(self): #if self.server_window is None: # self.server_window = ServerWindow(self.on_server_window_closed) # self.server_window.show() if self.ShareDatas_[1]==0: self.server_window = ServerApp(self.ShareDatas_,self.lock_) self.server_window.show() self.ShareDatas_[1]=1 else: self.server_window.raise_()# 窗口至于上层 def on_task_window_closed(self): self.task_window = None def on_server_window_closed(self): self.server_window = None if __name__ == "__main__": #1-1初始化共享内存 manager=Manager() ShareDatas_=manager.dict()#存str类型数据 #1-2用之前必须预先初始化 否则后面无法访问 ShareDatas_[0]=0#触发 ShareDatas_[1]=0#界面1 jsoN操作文件 打开情况 ShareDatas_[2]=0#界面2 服务器 打开情况 #1-3线程锁 保护多个线成对数据控 lock_=manager.Lock() app = QApplication(sys.argv) main_window = MainWindow(ShareDatas_,lock_) main_window.show() sys.exit(app.exec_())