qq_51650038 2023-12-09 10:32 采纳率: 0%
浏览 3

关于#pycharm#的问题:引入子程序

那位兄弟帮帮忙,我的要求是点击开始运行b2子程序,点击关闭结束所有。
运行结果是先运行b2子程序,运行结束后点击开始没反应,点击关闭一切正常。


import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
import b2


class Widget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 创建开始按钮
        start_btn = QPushButton('开始', self)
        # 将开始按钮的clicked信号连接到b2函数
        start_btn.clicked.connect(self.b2)
        # 指定开始按钮的位置
        start_btn.move(50, 50)

        # 创建关闭按钮
        close_btn = QPushButton('关闭', self)
        # 将关闭按钮的clicked信号连接到窗口的close方法
        close_btn.clicked.connect(self.close)
        # 指定关闭按钮的位置
        close_btn.move(130, 50)

        # 设定窗口的位置和大小
        self.setGeometry(300, 300, 320, 160)
        self.setWindowTitle('战争雷霆')

        # 显示窗口
        self.show()

    def b2(self):
        # 点击开始按钮时调用b2函数
        b2.main()


def main():
    # 创建应用程序对象
    app = QApplication(sys.argv)
    # 创建窗口对象
    ex = Widget()
    # 显示窗口
    ex.show()
    # 进入应用程序的主循环
    sys.exit(app.exec())


if __name__ == '__main__':
    main()



  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-09 12:04
    关注

    【以下回答由 GPT 生成】

    为了解决这个问题,你需要在PyCharm中创建一个新的进程来运行b2子程序。这样,你可以同时运行主程序和b2子程序,而不会导致主程序无法响应。

    要实现这个目标,你可以使用multiprocessing模块来创建一个新的进程。下面是修改后的代码:

    import sys
    from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
    import b2
    import multiprocessing
    
    class Widget(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            start_btn = QPushButton('开始', self)
            start_btn.clicked.connect(self.start_b2)
            start_btn.move(50, 50)
    
            close_btn = QPushButton('关闭', self)
            close_btn.clicked.connect(self.close)
            close_btn.move(130, 50)
    
            self.setGeometry(300, 300, 320, 160)
            self.setWindowTitle('战争雷霆')
            self.show()
    
        def start_b2(self):
            p = multiprocessing.Process(target=b2.main)
            p.start()
    
    def main():
        app = QApplication(sys.argv)
        ex = Widget()
        ex.show()
        sys.exit(app.exec())
    
    if __name__ == '__main__':
        main()
    

    在这个修改后的代码中,我们将点击开始按钮触发的事件改为start_b2,并在start_b2方法中创建了一个新的进程,并将b2子程序作为目标传递给新的进程。然后,我们使用p.start()方法来启动新的进程。

    这样一来,当你点击开始按钮时,b2子程序将在新的进程中运行,而不会影响到主程序的运行。同时,你仍然可以通过点击关闭按钮来结束整个程序的运行。

    请尝试运行修改后的代码,看看是否解决了你遇到的问题。如果还有其他问题,请随时提出。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月9日

悬赏问题

  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费
  • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)
  • ¥15 Workbench中材料库无法更新,如何解决?