我吮吸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接收到某个值时,如何通过启动循环来使其工作?
编辑:我可能只是错误的术语,这会损害我自己找到答案的能力。在这种情况下,“钩子”是按下按钮的时候。当变量等于某个东西时,我如何才能使它成为“钩子”?