如何使用PyQt中的按钮在while循环中退出程序

lkk*_*kkk 4 python pyqt adc

我有以下代码,这些代码将在PyQt中单击“开始”按钮后启动:

def Start(self):
  import time
  import os
  import RPi.GPIO as GPIO
  import datetime

  GPIO.setmode(GPIO.BCM)
  DEBUG = 1

  os.system('clear')

  # SPI port on GPIO
  SPICLK = 18
  SPIMISO = 23
  SPICS = 25

  # set up the SPI interface pins
  GPIO.setup(SPIMISO, GPIO.IN)
  GPIO.setup(SPICLK, GPIO.OUT)
  GPIO.setup(SPICS, GPIO.OUT)

  GPIO.output(SPICS, True)
  GPIO.output(SPICS, False) # bring CS low
  while True:
        adcout = 0             
        read_adc = 0
        #s=time.clock()
        for i in range(25):
            GPIO.output(SPICLK, True)
            GPIO.output(SPICLK, False)
            adcout <<= 1
            if (GPIO.input(SPIMISO)==1):
                adcout |= 0x1
        time.sleep(0.085)   
        if (GPIO.input(SPIMISO)==0):
            read_adc = adcout
            millivolts = read_adc * ( 2500.0 /(pow(2,22)))
            read_adc = "%d" % read_adc
            millivolts = "%d" % millivolts

        if DEBUG:
            print millivolts, "mV (ADC)"
Run Code Online (Sandbox Code Playgroud)

上面的程序用于ADC读取,它将在单击名为“开始”的按钮后启动,如下所示: self.pushButton.clicked.connect( self.Start)

我还有一个pushButton_2叫做“停止”的按钮,单击此按钮,以上过程应该会停止。请提出建议,这样我就可以做到这一点。

ekh*_*oro 5

除了在您对此主题提出的其他问题中建议的内容之外无需执行其他任何操作:只需使用processEvents。只要您可以足够频繁地调用它(但不要频繁),它就可以完全按照您的要求进行。使用您的第二个示例,以下对我来说很好用:

  def Start(self):
    if not self.started:
        self.started = True
        self.StartLoop()

  def Stop(self):
    if self.started:
        self.started = False

  def StartLoop(self):
    DEBUG = 1
    while self.started:
        print "LED on "
        time.sleep(0.05)
        print "LED off "
        time.sleep(0.085)
        QtGui.qApp.processEvents()
Run Code Online (Sandbox Code Playgroud)