- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每当线程 t1 每秒调用函数 wait_thread_v1 时,我的 python 脚本都需要更改一个对象 lcd_p1,但这是怎么做的?我不知道如何在函数内部访问这个对象?任何人都可以帮忙吗?
vazao1 = 12
global pulses_v1
pulses_v1 = 0
GPIO.setmode(GPIO.BCM)
GPIO.setup(vazao1, GPIO.IN)
class Window(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(50, 50, 640, 480)
self.setWindowTitle("Programa")
self.initUI()
def initUI(self):
self.lcd_v1 = QLCDNumber(self)
self.lcd_v1.display(0)
self.lcd_v1.setDigitCount(4)
self.lcd_v1.setFixedWidth(180)
self.lcd_v1.setFixedHeight(80)
self.lcd_v1.move(60,320)
def count_pulses_v1(channel):
global pulses_v1
pulses_v1 += 1
def wait_thread_v1():
global pulses_v1
while True:
time.sleep(1)
print("Pulsos total de vazão 1: "+str(pulses_v1))
#Window.initUI.self.lcd_p1.display(100)
pulses_v1 = 0
GPIO.add_event_detect(vazao1, GPIO.FALLING, callback=count_pulses_v1)
t1 = Thread(target=wait_thread_v1, name='thread_01', args=())
t1.start()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec())
最佳答案
如 the docs 所示,您不能也不应该从辅助线程修改 GUI。因为除了不需要创建新线程之外,Qt 不保证它可以工作。在这种情况下,最好创建一个 QObject 在调用回调时发出信号,因为它是线程安全的,然后将该信号连接到增加脉冲的槽,然后使用 QTimer 来实现线程的逻辑.
import sys
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QTimer
from PyQt5.QtWidgets import QApplication, QLCDNumber, QWidget
import RPi.GPIO as GPIO
class Window(QWidget):
def __init__(self):
super().__init__()
self.pulses = 0
self.setGeometry(50, 50, 640, 480)
self.setWindowTitle("Programa")
self.initUI()
timer = QTimer(self, timeout=self.on_timeout, interval=1000)
timer.start()
def initUI(self):
self.lcd_v1 = QLCDNumber(self)
self.lcd_v1.display(0)
self.lcd_v1.setDigitCount(4)
self.lcd_v1.setFixedWidth(180)
self.lcd_v1.setFixedHeight(80)
self.lcd_v1.move(60, 320)
@pyqtSlot()
def falling_slot(self):
self.pulses += 1
@pyqtSlot()
def on_timeout(self):
self.lcd_v1.display(self.pulses)
self.pulses = 0
class GPIOManager(QObject):
fallingSignal = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
pin = 12
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.IN)
GPIO.add_event_detect(pin, GPIO.FALLING, callback=self.falling_callback)
def falling_callback(self, channel):
# This method is called in the thread where GPIOs are monitored.
self.fallingSignal.emit()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
manager = GPIOManager()
manager.fallingSignal.connect(window.falling_slot)
sys.exit(app.exec())
关于python - 从外部函数访问 QLCDNumber 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59736501/
我想知道是否有一种方法可以将 QLcdNumber 小部件设置为具有固定的格式宽度。例如,我想将小部件设置为始终在昏迷前显示 3 个数字,在昏迷后显示 2 个: 000.00 001.00 120.5
我想扩展 QLCDNumber 以显示单位(如旧计算器中的 Deg/Rad/Grad 选择器)以及数字。正如我在高层看到的那样,要独立于样式,应该扩展绘图区域但限制 QLCDNumber 在扩展区域上
好吧,QLcdNumber 的值是使用 display() 属性设置的。第一次处理 QLcdNumber 时表现出奇怪的行为。考虑这个例子: void MainWindow::dataFromUdp(
为什么 QLCDNumber 的数字位数小于 QLCDNumber 参数允许的位数时不能居中?我可以绕过这个吗? 最佳答案 作为解决方法,您可以在每次设置新值时设置位数: ui->lcdNumber-
我有以下代码: Address = new QLCDNumber(this); Address->setDigitCount(4); Address->setSegmentStyle(QL
每当线程 t1 每秒调用函数 wait_thread_v1 时,我的 python 脚本都需要更改一个对象 lcd_p1,但这是怎么做的?我不知道如何在函数内部访问这个对象?任何人都可以帮忙吗? va
我是 Qt 的新手,现在我正在玩 trolltech tutorial 。 我设法使用 setPalette 方法自定义 QLCDNumber 颜色 和背景,但我似乎无法更改厚度。我理解是没有字母,所
我使用 QLCDNumber 制作了一个计时器,显示在我的状态栏上。我试图连接到我的插槽。但是,似乎从未调用过该插槽。谁能告诉我哪里出了问题? 谢谢。 顺便说一句,如果我使用这种方法,计时器会根据时钟
我对 Qt 和 python 有点陌生。我创建了一个简单的 GUI,它由垂直 slider 和一个 QLCDNumber 小部件组成。我以某种方式使用函数访问了 slider 的值。但现在我想在 QL
我想问一下,在我开始一些措施后,如何刷新QLCDNumbers。我创建了一个 GUI 线程来像这样将信号连接到 QLCDNumbers: class BtDialog(QtGui.QDialog, D
我有 QGridLayout,其中插入 QLCDNumber,如下所示: self.mainLayout.addWidget(display, 0, 0, 1 , 5) 一切都很好,但在窗口缩放时数字
通过为我的 python 脚本设计一个 GUI,该脚本与 PySerial 一起使用来实现一些串行接口(interface)函数,我希望显示一些读出源的参数。因此,这个 GUI 必须显示由参数 vol
我在一个 .cpp(即 ExerciseControl.cpp)中有一个工具按钮。单击按钮时,它将触发另一个.cpp(即StatusBar.cpp)中的两个计时器。 但是,下面的代码不起作用。当我单击
我正在尝试创建一个数字时钟。但是,我的目的不是获取 currentTime()。相反,我正在定义自己的时间并从那里开始增加时间。 但是,在我的代码中,我可以调用 tickSimulation(),但时
这是我自定义的 LCD 类,继承自 QLCDNumber。 myLCD.h : #ifndef MYLCD_H #define MYLCD_H #include class MyLCD : publ
我想知道处理以下情况的最佳方法是什么? 我正在动态创建 QSlider,我希望将其链接到关联的 QLCDNumber 以进行显示。问题是我想要十分之一可用,所以我想在 QSLider 和 QLCDNu
我是一名优秀的程序员,十分优秀!