• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
pyqt5 界面A打开另一个界面B
 
 
 

样例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_())

  

posted on 2024-12-28 02:10  MKT-porter  阅读(32)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3