С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/55: Рейтинг темы: голосов - 55, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 17.01.2019
Сообщений: 22
PyQt5

LCD number вывод температуры

03.05.2019, 20:24. Показов 11695. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте, что бы понятно было, я не изучал не когда не Python не QT .
Собрался я на без Raspberry Pi3 умный дом собрать, первая задача его будет следить за климатом в доме, с помощью датчиков различных могу получать показания в консоли, теперь занялся оболочкой, Web интерфейс хоть и подойдёт мне больше думаю не осилю, решил развернуть его на QT, в Creator создал форму накидал туда LCD number, нашёл пример в котором делают с помощью LCD number часы, но не помогло, нужна помощь в объяснении как мне в LCD number выводить показания с датчиков или же выводить из текстовика в который буду всё равно записывать эти данные что бы какая то история была и можно было отстраивать работу котла и вентиляшки по изменению различных температур.
Вот код получения температуры воздуха:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/python3
 
 
 
import sys , os, time
 
import Adafruit_DHT as dht
from datetime import datetime
 
 
 
sensor = 22
 
pin = 14
 
 
 
while True:
 
    c = time.strftime("%M", time.localtime())
 
    d = '00' 
    
    if c==d :
 
           humidity, temperature = dht.read_retry(sensor, pin)
    
    if (humidity is not None) and (temperature is not None):
 
                nowtime = datetime.strftime(datetime.now(), "%d.%m %H:%M:%S")
    
            print ( nowtime,'Температура {0:0.1f}C  Влажность {1:0.1f}%'.format(temperature, humidity))
    
            time.sleep(60)
 
            else:
            
        print ("Считывание неудалось!")
Вот пример из книжки где в LCD выводится значение ползунка: (я его уже перелопачивал сто раз не один не работает вариант поэтому проще показать оригинал)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/python3
 
# -*- coding: utf-8 -*-
 
 
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider,
    QVBoxLayout, QApplication)
 
 
 
class Example(QWidget):
 
 
 
    def __init__(self):
 
        super().__init__()
 
 
        self.initUI()
 
 
 
 
    def initUI(self):
 
 
 
        lcd = QLCDNumber(self)
 
        sld = QSlider(Qt.Horizontal, self)
 
 
 
        vbox = QVBoxLayout()
 
        vbox.addWidget(lcd)
 
        vbox.addWidget(sld)
 
 
 
        self.setLayout(vbox)
 
        sld.valueChanged.connect(lcd.display)
 
 
 
        self.setGeometry(300, 300, 250, 150)
 
        self.setWindowTitle('Signal & slot')
 
        self.show()
 
 
 
 
if __name__ == '__main__':
 
 
 
    app = QApplication(sys.argv)
 
    ex = Example()
 
    sys.exit(app.exec_())
Мне бы любой пример как можно реализовать вывод моих чисел хоть просто 123456 вывести я может догадаюсь как дальше
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2019, 20:24
Ответы с готовыми решениями:

Int number = 2; Console.WriteLine(++number - number-- * ++number); Выводит -6; Как ?
Знающие, объясните, пожалуйста. Каким чудом тут получается -6 ? O_o int number = 2; Console.WriteLine(++number - number-- *...

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Создаю веб-приложение по типу "Моего календаря" На финальном этапе возникает ошибка Uncaught PDOException: SQLSTATE: Invalid...

Fatal error - Invalid parameter number: number of bound variables does not match number of tokens'
$pass = md5($_POST); $email = $_POST; $login = $_POST; $sex = $_POST; $avatar = $_POST; ...

6
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
03.05.2019, 21:33
Лучший ответ Сообщение было отмечено shamsing как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QLCDNumber, QSlider, QVBoxLayout, QApplication, QPushButton, QLineEdit
 
 
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.lcd = QLCDNumber(self)
        sld = QSlider(Qt.Horizontal, self)
        self.qle = QLineEdit(self)
        button = QPushButton('Button', self)
 
        vbox = QVBoxLayout()
        vbox.addWidget(self.lcd)
        vbox.addWidget(sld)
        vbox.addWidget(self.qle)
        vbox.addWidget(button)
 
        self.setLayout(vbox)
 
        sld.valueChanged.connect(self.lcd.display)
        button.clicked.connect(self.on_click)
 
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Signal & slot')
        self.show()
 
    def on_click(self):
        self.lcd.display(int(self.qle.text()))
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
1
0 / 0 / 0
Регистрация: 17.01.2019
Сообщений: 22
03.05.2019, 22:41  [ТС]
Огромное спасибо tooru , очень помогло ваше решение, пока что сделал так, т.к. если в основном цикле почему то подвисает приложение и либо через несколько секунд появляется данные либо просто диспетчер говорит что приложение неотвеает и предлагает его закрыть( наверное нужно убавить частоту считывания что ле у цикла.
ОГРОМНОЕ СПАСИБО )

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import sys, os, time
import Adafruit_DHT as dht
from datetime import datetime
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QLCDNumber, QSlider, QVBoxLayout, QApplication, QPushButton, QLineEdit
 
 
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.lcdt = QLCDNumber(self)
        self.lcdh = QLCDNumber(self)
        button = QPushButton('Записать', self)
 
        vbox = QVBoxLayout()
        vbox.addWidget(self.lcdt)
        vbox.addWidget(self.lcdh)
        vbox.addWidget(button)
 
        self.setLayout(vbox)
   
        button.clicked.connect(self.on_click)
 
        self.setGeometry(300, 300, 400, 200)
        self.setWindowTitle('Температура 24/7')
        self.show()
        
        sensor = 22
        pin = 14
        '''while True:
            humidity, temperature = dht.read_retry(sensor, pin)
            if (humidity is not None) and (temperature is not None):
                t = temperature
                h = humidity
                self.lcdt.display(int(t))
                self.lcdh.display(int(h))
                time.sleep(5)'''
       
 
    def on_click(self):
        sensor = 22
        pin = 14
        humidity, temperature = dht.read_retry(sensor, pin)
        if (humidity is not None) and (temperature is not None):
            t = temperature
            h = humidity
            #self.lcd.display(int(self.qle.text()))
            self.lcdt.display(int(t))
            self.lcdh.display(int(h))
        
 
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
03.05.2019, 22:48
Лучший ответ Сообщение было отмечено shamsing как решение

Решение

Цитата Сообщение от shamsing Посмотреть сообщение
т.к. если в основном цикле почему то подвисает приложение и либо через несколько секунд появляется данные либо просто диспетчер говорит что приложение неотвеает
Лучше сделать чтение данных по таймеру, вот пример

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import sys
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QWidget, QApplication, \
    QLCDNumber, QSlider, QVBoxLayout, QHBoxLayout, QPushButton
 
 
class MainWindow(QWidget):
 
    def __init__(self):
        super().__init__()
 
        self.lcd = QLCDNumber(self)
        # Устанавливаем значение по умолчанию на дисплей
        self.lcd.display(1)
 
        self.slider = QSlider(Qt.Horizontal, self)
        # Устанавливаем минимальное и максимальное значение
        self.slider.setMinimum(1)
        self.slider.setMaximum(90)
        self.slider.valueChanged.connect(self.lcd.display)
 
        self.start_btn = QPushButton('Start', self)
        self.start_btn.clicked.connect(self.start_btn_clicked)
        self.toggle_btns()
 
        hbox = QHBoxLayout()
        hbox.addWidget(self.slider)
        hbox.addWidget(self.start_btn)
 
        vbox = QVBoxLayout()
        vbox.addWidget(self.lcd)
        vbox.addLayout(hbox)
 
        self.setLayout(vbox)
 
        self.setWindowTitle('Timer PyQt5')
        self.resize(400, 300)
 
    def toggle_btns(self, value=True):
        self.slider.setEnabled(value)
        self.start_btn.setEnabled(value)
 
    def start_btn_clicked(self):
        # Отключаем слайдер и кнопку старта
        self.toggle_btns(False)
        # запускаем отсчет
        self.tick_timer()
 
    def tick_timer(self):
        # Получаем значение на LCD виджете
        lcd_value = self.lcd.value()
        if lcd_value > 0:
            # Устанавливаем значение на 1 меньше
            self.lcd.display(lcd_value - 1)
            # Засекаем таймер - значение в милисекундах
            # метод singleShot создает поток в фоне, отменить его нельзя
            QTimer().singleShot(1000, self.tick_timer)
        else:
            # Значение дисплея стало 0
            # Включаем элементы интерфейса обратно
            self.toggle_btns()
            # Устанавливаем на дисплей выбранную на слайдере настройку
            self.lcd.display(self.slider.value())
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
1
0 / 0 / 0
Регистрация: 17.01.2019
Сообщений: 22
03.05.2019, 23:00  [ТС]
Цитата Сообщение от tooru Посмотреть сообщение
Лучше сделать чтение данных по таймеру, вот пример
Спасибо завтра попробую этот вариант, очень просто воспринимается когда есть Коментарии спасибо за пример
0
0 / 0 / 0
Регистрация: 17.01.2019
Сообщений: 22
04.05.2019, 11:00  [ТС]
просмотрел код ,посмотрел как он работает и что то не совсем понимаю как мне его применить(

Добавлено через 29 минут
Я точно знаю что цикл вешает программу только не понимаю по какой причине даже если я ему ставлю time.sleep(60)
получается после выполнения одного раза должен ждать минуту и повторять цикл, всё равно зависает и даже первый раз не показывает , если по кнопке обновлять то поставил формат str что бы видеть по больше чисел и заметить изменения то обновляется секунд через 5,что я сильно нагружаю ?

Добавлено через 58 минут
Сделал )
Добавить пару лейблов, сделать отображение десятичные что бы были и убрать получается LCDnumber отсчета и получается работает )
Спасибо за помощь я пару недель по вечерам этим занимался безрезультатно до того как вы мне помогли
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import sys, os, time
import Adafruit_DHT as dht
from datetime import datetime
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QWidget, QApplication, \
    QLCDNumber, QSlider, QVBoxLayout, QHBoxLayout, QPushButton
 
 
class MainWindow(QWidget):
 
    def __init__(self):
        super().__init__()
 
        self.lcd = QLCDNumber(self)
        # Устанавливаем значение по умолчанию на дисплей
        self.lcd.display(10)
        self.lcdt = QLCDNumber(self)
        self.lcdh = QLCDNumber(self)
 
        self.start_btn = QPushButton('Start', self)
        self.start_btn.clicked.connect(self.start_btn_clicked)
        self.toggle_btns()
 
        hbox = QHBoxLayout()
        hbox.addWidget(self.start_btn)
 
        vbox = QVBoxLayout()
        vbox.addWidget(self.lcd)
        vbox.addWidget(self.lcdt)
        vbox.addWidget(self.lcdh)
        vbox.addLayout(hbox)
 
        self.setLayout(vbox)
 
        self.setWindowTitle('Температура 24/7')
        self.resize(400, 300)
 
    def toggle_btns(self, value=True):
        self.start_btn.setEnabled(value)
 
    def start_btn_clicked(self):
        # Отключаем  кнопку старта
        self.toggle_btns(False)
        # запускаем отсчет
        self.tick_timer()
        
 
    def tick_timer(self):
        # Получаем значение на LCD виджете
        lcd_value = self.lcd.value()
        if lcd_value > 0:
            # Устанавливаем значение на 1 меньше
            self.lcd.display(lcd_value - 1)
            # Засекаем таймер - значение в милисекундах
            # метод singleShot создает поток в фоне, отменить его нельзя
            QTimer().singleShot(1000, self.tick_timer)
        else:
            # Значение дисплея стало 0
            sensor = 22
            pin = 14
            humidity, temperature = dht.read_retry(sensor, pin)
            if (humidity is not None) and (temperature is not None):
                t = temperature
                h = humidity
                self.lcdt.display(int(t))
                self.lcdh.display(int(h))
            
            self.lcd.display(10)
            self.tick_timer()
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
0
0 / 0 / 0
Регистрация: 17.01.2019
Сообщений: 22
04.05.2019, 22:42  [ТС]
Сделал ), обновляется каждые 10 секунд, правда проц все равно нагружает почему то (
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import sys, os, time
import Adafruit_DHT as dht
from datetime import datetime
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QWidget, QApplication, \
    QLCDNumber, QVBoxLayout, QHBoxLayout, QLabel
 
 
class MainWindow(QWidget):
 
    def __init__(self):
        super().__init__()
        
        self.lcdt = QLCDNumber(self)
        self.lcdh = QLCDNumber(self)
 
        vbox = QVBoxLayout()
        vbox.addWidget(self.lcdt)
        vbox.addWidget(self.lcdh)
        self.setLayout(vbox)
        
 
        self.setWindowTitle('Температура 24/7')
        self.resize(400, 300)      
        self.tick_timer()
 
    
        
 
    def tick_timer(self):
        # Засекаем таймер - значение в милисекундах
        # метод singleShot создает поток в фоне, отменить его нельзя   
        sensor = 22
        pin = 14
        QTimer().singleShot(10000, self.tick_timer)
        humidity, temperature = dht.read_retry(sensor, pin)
        if (humidity is not None) and (temperature is not None):
            t = '{0:0.1f}'.format(temperature)
            h = '{0:0.1f}'.format(humidity)
            self.lcdt.display(str(t))
            self.lcdh.display(str(h))
        else:
            t = 'Err'
            h = 'Err'
            self.lcdt.display(str(t))
            self.lcdh.display(str(h))
            self.tick_timer()
            
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2019, 22:42
Помогаю со студенческими работами здесь

Invalid parameter number: number of bound variables does not match number of tokens
запрос $conn = connect_to_db(); $stmt = $conn->prepare("INSERT INTO brandaccounts (UserID, BrandID, LoginEmail, LoginID,...

Invalid parameter number: number of bound variables does not match number of tokens
Не могу решить ошибку: Invalid parameter number: number of bound variables does not match number of tokens Указывает на : if...

Invalid parameter number: number of bound variables does not match number of tokens in
Добрый день. не могу понять в чем может быть дело Изменил файл <?php define('unisitecms', true); session_start();

Что значит эта строка return number == 1 ? 1 : (Foo(number - 1) + Foo(number - 2); ?
return number == 1 ? 1 : (Foo(number - 1) + Foo(number - 2));

Вывод результата на LCD
Подскажите пожалуйста, как выполнить арифметические операции Например: сложение 2х чисел, но числа не целые, а дробные например 2,5+4,15 и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru