Python闲置,直到我希望它改变某些

时间:2017-09-15 17:03:28

标签: python pyqt signals-slots gpio

我吮吸python,只是把它拿出来。无论如何,当我在Razzleberry Pi的GPIO引脚上收到信号时,我正在尝试编写一些代码来简单地更新QTgui中的进度条。我搜索了分配,可能看起来正确答案,但我对python的有限理解可能让我想念它。不起作用的代码如下:

import os
os.environ["DISPLAY"] = ":0"
import sys
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
import time
# This gets the Qt stuff
import PyQt5
from PyQt5.QtWidgets import *

# This is our window from QtCreator
import mainwindow

GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(20, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP)
p=0
def my_callback(channel):
    global recv
    recv=0
    if (GPIO.input(19) == GPIO.HIGH):
        recv=recv+1
    if (GPIO.input(13) == GPIO.HIGH):
        recv=recv+2
    if (GPIO.input(6) == GPIO.HIGH):
        recv=recv+4
    if (GPIO.input(5) == GPIO.HIGH):
        recv=recv+8
    if (GPIO.input(21) == GPIO.HIGH):
        recv=recv+16
    if (GPIO.input(20) == GPIO.HIGH):
        recv=recv+32
    if (GPIO.input(16) == GPIO.HIGH):
        recv=recv+64
    if (GPIO.input(12) == GPIO.HIGH):
        recv=recv+128
    print (recv)
GPIO.add_event_detect(26, GPIO.BOTH, callback=my_callback, bouncetime=300)
#import smbus
# create class for our Raspberry Pi GUI
class MainWindow(QMainWindow, mainwindow.Ui_MainWindow):
    # access variables inside of the UI's file
    def doStuff(self):
        global p
        if (recv == 255):
            self.progressBar.setValue = p
        if (recv == 135):
            self.barTemp.setValue = p
        p=p+1
        time.sleep(0.1)

    def __init__(self):
 #       GPIO.add_event_detect(26, GPIO.FALLING, callback=my_callback, bouncetime=300)
        super(self.__class__, self).__init__()
        self.setupUi(self)  # gets defined in the UI file
 #       self.btnTest.clicked.connect(lambda: self.difthread(1))
        self.btnTemp.clicked.connect(lambda: self.doStuff())

def main():
    app = QApplication(sys.argv)
    form = MainWindow()
    form.show()
    # without this, the script exits immediately.
    sys.exit(app.exec_())

recv=0
        # a new app instance




# python bit to figure how who started This
if __name__ == "__main__":
    main()

我希望添加触发器可以帮助它变聪明,但是没有用。当谈到什么地方以及为什么它如此自私(打赌你以前从未听过)时,我有点迷失蟒蛇,无论如何,如果有人能帮助我永远欠你的债务,并希望你不要记住我的无知。

编辑:只想投入回调,一切正常。理想情况下,我想要它做的是显示gui,然后一遍又一遍地开始遍历“doStuff”例程。后来我会根据收到的输入做出不同的例行动作,但与此同时,只是试图让它做出回应。全局“p”本质上是一个变量,它允许程序根据它循环的次数做出反应(我知道p是一个糟糕的变量名,但是当我感到沮丧时,我的变量往往变得非常“肮脏”,所以我编辑它是为了更好的人类消费)

编辑:如此小的更新,将dostuff更改为以下内容:

def doStuff(self):
    while (1):
        global p
        if (recv == 255):
            self.progressBar.setValue(p)
        if (recv == 135):
            self.barTemp.setValue (p)
        p=p+1
        time.sleep(0.1)

显然我没有正确使用“setValue”。现在,这是有效的,我将如何去除按钮的要求。也就是说,当通过GPIO接收到某个值时,如何通过启动循环来使其工作?

编辑:我可能只是错误的术语,这会损害我自己找到答案的能力。在这种情况下,“钩子”是按下按钮的时候。当变量等于某个东西时,我如何才能使它成为“钩子”?

0 个答案:

没有答案