- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在qtdesigner中设计了一个表单。它具有“开”和“关”按钮。开按钮应该开始闪烁,而关按钮应该停止它。因此,如果time.sleep持续时间很短,那没有问题,但是当我写10秒钟的 sleep 时间时,当我单击关闭按钮时它不会立即停止。程序等待10秒以停止Led闪烁。那么time.sleep如何被打断呢?
import time
import threading
import RPi.GPIO as GPIO
import sys
from time import sleep
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication, QLabel
from PyQt5 import QtCore, QtGui, QtWidgets
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
switch = True
def blink(self):
def run():
while (switch == True):
print('BLINK...BLINK...')
GPIO.output(17, GPIO.HIGH)
time.sleep(10.0)
GPIO.output(17, GPIO.LOW)
time.sleep(10.0)
if switch == False:
break
thread = threading.Thread(target=run)
thread.start()
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.pshbttn1 = QtWidgets.QPushButton(Form)
self.pshbttn1.setGeometry(QtCore.QRect(60, 170, 125, 50))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.pshbttn1.setFont(font)
self.pshbttn1.setObjectName("pshbttn1")
self.pshbttn1.clicked.connect(self.switchon)
self.pshbttn2 = QtWidgets.QPushButton(Form)
self.pshbttn2.setGeometry(QtCore.QRect(220, 170, 125, 50))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.pshbttn2.setFont(font)
self.pshbttn2.setObjectName("pshbttn2")
self.pshbttn2.clicked.connect(self.switchoff)
self.pshbttn3 = QtWidgets.QPushButton(Form)
self.pshbttn3.setGeometry(QtCore.QRect(140, 230, 125, 50))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.pshbttn3.setFont(font)
self.pshbttn3.setObjectName("pshbttn3")
self.pshbttn3.clicked.connect(app.exit)
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(80, 80, 251, 51))
font = QtGui.QFont()
font.setPointSize(12)
self.label.setFont(font)
self.label.setObjectName("label")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "LED"))
self.pshbttn1.setText(_translate("Form", "ON"))
self.pshbttn2.setText(_translate("Form", "OFF"))
self.pshbttn3.setText(_translate("Form", "EXIT"))
self.label.setText(_translate("Form", "LED\'i açmak için butonları kullanın"))
def switchon(self):
global switch
switch = True
print ('switch on')
blink(self)
def switchoff(self):
print ('switch off')
global switch
switch = False
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_Form()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
最佳答案
在这种情况下,不必使用 sleep ,只需使用QTimer。为了简化任务,我创建了一个处理销钉的类。另外,PyQt5建议不要修改Qt Designer生成的类。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
import RPi.GPIO as GPIO
class Led:
def __init__(self, pin, timeout=1000):
self._state = False
self._pin = pin
self._timeout = timeout
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(self.pin, GPIO.OUT)
self.blink_timer = QtCore.QTimer(
interval=self.timeout, timeout=self._on_blink_timeout
)
def _on_blink_timeout(self):
self.state = not self.state
def _update_internal_state(self):
GPIO.output(self.pin, GPIO.HIGH if self._state else GPIO.LOW)
@property
def pin(self):
return self._pin
@property
def timeout(self):
return self._timeout
@timeout.setter
def timeout(self, v):
self._timeout = v
is_active = self.blink_timer.isActive()
self.blink_timer.setInterval(self.timeout)
if is_active:
self.blink_timer.start()
def on(self):
self.state = True
def off(self):
self.state = False
@property
def state(self):
return self._state
@state.setter
def state(self, s):
self._state = s
self._update_internal_state()
def start(self):
self.state = True
self.blink_timer.start()
def stop(self):
self.state = False
self.blink_timer.stop()
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.pshbttn1 = QtWidgets.QPushButton(Form)
self.pshbttn1.setGeometry(QtCore.QRect(60, 170, 125, 50))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.pshbttn1.setFont(font)
self.pshbttn1.setObjectName("pshbttn1")
self.pshbttn2 = QtWidgets.QPushButton(Form)
self.pshbttn2.setGeometry(QtCore.QRect(220, 170, 125, 50))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.pshbttn2.setFont(font)
self.pshbttn2.setObjectName("pshbttn2")
self.pshbttn3 = QtWidgets.QPushButton(Form)
self.pshbttn3.setGeometry(QtCore.QRect(140, 230, 125, 50))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.pshbttn3.setFont(font)
self.pshbttn3.setObjectName("pshbttn3")
self.pshbttn3.clicked.connect(app.exit)
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(80, 80, 251, 51))
font = QtGui.QFont()
font.setPointSize(12)
self.label.setFont(font)
self.label.setObjectName("label")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "LED"))
self.pshbttn1.setText(_translate("Form", "ON"))
self.pshbttn2.setText(_translate("Form", "OFF"))
self.pshbttn3.setText(_translate("Form", "EXIT"))
self.label.setText(_translate("Form", "LED'i açmak için butonları kullanın"))
class Widget(QtWidgets.QWidget, Ui_Form):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.setupUi(self)
self.led = Led(17, timeout=10000)
self.pshbttn1.clicked.connect(self.led.start)
self.pshbttn2.clicked.connect(self.led.stop)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
关于python - LED闪烁如何打发时间。 sleep RPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59431441/
我正在从事密室逃脱项目。实际上,我试图创建的行为如下: 网络浏览器以通常的方式显示网络应用程序的一部分。从此时起,客户端上将不再有键盘/鼠标的输入。我已经使用 JS 解决了基于时间的更改,因此我可以加
背景 我试图使用 netatalk创建 Time Capsule使用 Raspberry Pi 3 ,按照教程here .部分版本信息: netatalk 3.1.12 macOS 10.14.5 树
目标:将i2c时钟频率更改为400 khz。动机:试图通过i2c使用Adafruit BNO085,但RPI i2c时钟伸展存在已知问题。(这是一个已知的漏洞,自2012年以来一直在传播)。。我一直在
我正在尝试编写一个小脚本来基于两个因素控制两个树莓派的 gpio 输出引脚:GPIO.input.17 的状态和一天中的时间。 我希望 gpio.output.23 和 gpio.output.25
拥有运行Docker 17.11.0-ce和Docker Compose 1.17.1的RaspberryPi。 我有一个包含两个容器的docker-compose文件,都将restart-polic
我正在尝试使用 Raspbian 在 Raspberry Pi 3 上从另一个 python 脚本运行 python 脚本。几个小时以来,我一直在努力寻找方法来做到这一点,但没有找到任何有效的方法。我
我想通过 Python 使用 R。我想知道要安装哪个版本的 rpy,文档中并不清楚。 我使用的是 OSX 10.5 (leopard) 的 Mac。 我使用Python 2.7版本。 感谢您的帮助!
我在qtdesigner中设计了一个表单。它具有“开”和“关”按钮。开按钮应该开始闪烁,而关按钮应该停止它。因此,如果time.sleep持续时间很短,那没有问题,但是当我写10秒钟的 sleep 时
当我尝试运行应用程序时(只是一个简单的hello_world.c不起作用),每次都会收到此错误: mpiexec -ckpointlib blcr -ckpoint-prefix /tmp/ -ckp
所以我正在尝试设计一个 LCD 屏幕,它有一个菜单和一堆不同的功能,并且它应该有 4 个按钮。选择、菜单以及向上和向下。现在我只是想处理菜单按钮。我希望它始终显示时钟,除非按下菜单按钮。但是当我按下按
我按照此处的说明在我的 Raspberry Pi 上成功安装了 Keras: https://medium.com/@abhizcc/installing-latest-tensor-flow-and
这里的真正目标是在Python中找到分位数平均值(或总和,或中位数等)。由于我不是 Python 的高级用户,但已经使用 R 一段时间了,所以我选择的路线是通过 Rpy。但是,我遇到了以下问题:返回的
在多处理环境中调用 RPy 函数是否安全?关于 RPy 是否存在任何应该注意的多处理问题? 一个简单的例子如下: from multiprocessing import Pool from rpy i
我正在开发一个将 Android 设备与 Raspberry Pi 连接起来的项目。 RPi 需要被视为用户永远不需要触摸的可部署设备。出于这个原因,我正在尝试在 RPi 上编写一个启动批处理脚本,允
我正在尝试从服务器向客户端发送数据字节,因此我使用文件指针来指向文件已读取的位置并读取字节集并将其发送到客户端。 下面是服务器端 byte[] b = readByte()// my function
我正在尝试将 MySQL 数据库从我的 Raspberry Pi 重新定位到我的外部硬盘驱动器,以便我可以保留更大的数据库。我对此知之甚少,所以如果这个问题太简单,我深表歉意,但这些是我迄今为止所采取
我被 Python 包中的 wait_for_edge 函数卡住了 RPi .我为下降的 gpio 添加了多个事件检测,只要回调函数不包含像 os.system("mpc pause") 然后脚本崩
我尝试在 Raspberry Pi 上升级现有的 JDK8,但失败了。 我从oracle网站下载了ARM版本,在Windows中解压,通过FTP传输到我的pi上,然后复制到/usr/local。 然后
我的代码是这样的 package me.Andrew.Keypad.Listener; import java.util.HashMap; import com.pi4j.io.gpio.GpioCo
编写脚本保存在闪存驱动器上,用于更新多个树莓派上的代码。我的想法是,我将目录从树莓派 sd 卡备份到闪存驱动器,然后将新文件从闪存驱动器复制到 pi 中的 sd 卡。 我得到的行为是所有内容都从闪存移
我是一名优秀的程序员,十分优秀!