我怎么能在python中停止模块?

时间:2015-05-15 06:01:31

标签: python python-2.7 pyqt4 exit

我有一个简单的代码。

  1. 按下开始按钮 - >无限循环和应用程序清除
  2. 停止按钮 - >无限循环由控制c事件停止
  3. 但我希望使用其他方式停止test2.py而不是控制c事件。

    因为我在没有控制台的情况下使用.exe制作了pyinstaller文件。

    所以控制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 个答案:

答案 0 :(得分:1)

使用简单的标志:

<强> test2.py

<div id="blogPosts">
    <div class="blog">Content</div>
    <div class="blog">Content</div>
    ...
</div>

<强> test1.py

active = False

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

答案 1 :(得分:0)

提出任何例外情况。如果您的目标是模仿Ctrl-C,请使用KeyboardInterrupt。也就是说,替换

GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0)

raise KeyboardInterrupt('You pressed the stop button.')
test.py中的