
样例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_())
浙公网安备 33010602011771号