样例1 函数绑定触发关闭
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 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 共享内存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | 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_()) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2022-12-28 GPS开发(3)python读取TXT计算总里程
2018-12-28 微信硬件平台(0) 流程介绍
2018-12-28 微信学习资料
2017-12-28 PCB (4)原理图导入PCB
2017-12-28 PCB (3)创建新工程PCB
2017-12-28 PCB (2)创建新工程原理图
2017-12-28 极客学院 1 安卓环境配置