如何在python中停止模块



我有一个简单的代码。

  1. 启动按钮按下->无限循环和应用程序清除
  2. 停止按钮按下->控制c事件停止无限循环

但我想用其他方式停止CCD_ 1,而不是控制c事件。

因为我在没有控制台的情况下使用CCD_ 3制作了CCD_。

所以控制c事件不起作用。。。

如何停止test2模块?

test.py:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import test2
from PyQt4 import QtGui, QtCore
from win32api import GenerateConsoleCtrlEvent
from win32con import CTRL_C_EVENT

class Example(QtGui.QMainWindow):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    def initUI(self):      
        btn1 = QtGui.QPushButton("Start", self)
        btn1.move(30, 50)
        btn2 = QtGui.QPushButton("Stop", self)
        btn2.move(150, 50)
        btn1.clicked.connect(self.start)            
        btn2.clicked.connect(self.stop)
        self.statusBar()
        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Event sender')
        self.show()
    def start(self):
        sender = self.sender()
        self.statusBar().showMessage(sender.text())
        test2.main(app)
    def stop(self):
        sender = self.sender()
        self.statusBar().showMessage(sender.text())
        GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0)
def main():
    global app
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

test2.py:

def main(app):
    while 1:
        print "infinite loop"
        app.processEvents()

使用一个简单的标志:

测试2.py

active = False
def main(app):
    global active
    active = True
    while active:
        print "infinite loop"
        app.processEvents()

测试1.py

class Example(QtGui.QMainWindow):
    ...
    def stop(self):
        ...
        test2.active = False

引发任何异常。如果您的目标是模仿Ctrl-C,请使用KeyboardInterrupt。也就是说,更换线路

GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0)

带有

raise KeyboardInterrupt('You pressed the stop button.')

在CCD_ 7中。

相关内容

  • 没有找到相关文章

最新更新