Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2019 15:25:11

dima_ikar
Зарегистрирован: 2019-05-03
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Python PyQt5 QLabel Обновление данных

Я понимаю что тема очень заезженная, НО если есть возможность помогите - не могу понять почему при нажатии кнопок не обновляются данные окна. Кто может прочитать мой код и подсказать где ошибка Программа берет данные и вставляет их в QLabel мой код

   
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *from 
PyQt5.QtGui import *
from PyQt5.QtCore import *
import pymysql
pymysql.install_as_MySQLdb()
import MySQLdb
class Winop(QWidget):
def __init__(self, parent=None):
    QWidget.__init__(self, parent)
    db = MySQLdb.connect("0.0.0.0", "im", "", "app")
    self.kolstrok = 1
    cursor = db.cursor()
    cursor.execute("select count(*) from list_device")
    self.kolnew = cursor.fetchone()[0]
    self.Bazaset()
def Bazaset(self):
    ip = 0
    self.Winset()
    try:
        db = MySQLdb.connect("0.0.0.0", "im", "", "app")
        cursor = db.cursor()
        cursor.execute("select device_id, ip from list_device  WHERE device_id=" +str(self.kolstrok))
        for row_ip in cursor.fetchall():
            ip = row_ip[1]
            cursor.execute("select * from _data_in_memory  WHERE device_id=" +str(self.kolstrok))
            self.label.lab = QtWidgets.QLabel(self)
            font = QtGui.QFont()
            font.setFamily("Times New Roman")
            self.setFont(font)
            font.setPointSize(10)
            self.label.lab.setFont(font)
            self.label.lab.setGeometry(QtCore.QRect(10, 20, 295, 20))
            self.label.lab.setText(ip)
            for row_dan in cursor.fetchall():
                self.label.lab1 = QtWidgets.QLabel(self)
                self.label.lab1.setGeometry(QtCore.QRect(10, 40, 140, 20))
                self.label.lab1.setText("internal temperature °C")
                self.label.lab11 = QtWidgets.QLabel(self)
                self.label.lab11.setGeometry(QtCore.QRect(160, 40, 100, 20))
                self.label.lab11.setText(row_dan[2])
        db.close()
    except MySQLdb.Error as e:
        QMessageBox.about(self, 'Connection', 'Failed To Connect Database')
        sys.exit(1)
def Winset(self):
    self.window_height = 300
    self.window_width = 500
    self.setObjectName("menu")
    font = QtGui.QFont()
    font.setFamily("Times New Roman")
    self.setFont(font)
    font.setPointSize(10)
    font.setBold(True)
    font.setWeight(75)
    self.setFixedSize(self.window_height, self.window_width)
    self.setWindowIcon(QIcon('logo1.png'))
    self.setWindowTitle("Teco monitoring")
    oImage = QImage("6706.jpg")
    sImage = oImage.scaled(QSize(self.window_height, self.window_width))
    palette = QPalette()
    palette.setBrush(QPalette.Window, QBrush(sImage))
    self.setPalette(palette)
    self.label = QtWidgets.QLabel(self)
    self.label.setFont(font)
    self.label.setGeometry(QtCore.QRect(100, 5, 101, 20))
    self.label.setText("Current values")
    self.previous = QtWidgets.QPushButton(self)
    self.previous.setGeometry(QtCore.QRect(20, 450, 70, 23))
    self.previous.setFont(font)
    self.previous.setObjectName("Previous")
    self.previous.clicked.connect(self.minus)
    self.previous.setText("Previous")
    self.next = QtWidgets.QPushButton(self)
    self.next.setGeometry(QtCore.QRect(200, 450, 70, 23))
    self.next.setFont(font)
    self.next.setObjectName("Next")
    self.next.clicked.connect(self.plus)
    self.next.setText("Next")
def plus(self):
    self.kolstrok = self.kolstrok + 1
    if (self.kolstrok > self.kolnew):
        self.kolstrok = 1
    else:
        self.kolstrok = 2
        self.Bazaset()
def minus(self):
    self.kolstrok = self.kolstrok - 1
    if (self.kolstrok == 0):
        self.kolstrok = 1
        self.Bazaset()
# END ----------------------------------------------
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
F2_window = Winop()
F2_window.show()
sys.exit(app.exec_())

Отредактировано FishHook (Июль 16, 2019 15:31:55)

Офлайн

#2 Июль 16, 2019 15:36:26

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Python PyQt5 QLabel Обновление данных

dima_ikar

не могу понять почему при нажатии кнопок не обновляются данные окна
Ну отлично, зачем вы такую портянку вывалили? Конект к базе, шрифты, иконки - это все не имеет отношения к вопросу, и просто запутывает. Сделайте просто одно окно, даже без заголовка, с одной кнопкой и с одним лэйблом. Сделать хэндлер нажатия на кнопку, который одновляет лэйбл. Покажите код.



Офлайн

#3 Июль 16, 2019 16:00:02

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Python PyQt5 QLabel Обновление данных

class Winop(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
db = MySQLdb.connect(“0.0.0.0”, “im”, “”, “app”)
self.kolstrok = 1
вы реально с такой табуляцией пишете? где отступы?

Офлайн

#4 Июль 16, 2019 19:28:25

dima_ikar
Зарегистрирован: 2019-05-03
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Python PyQt5 QLabel Обновление данных

vic57
Нет табуляция у меня нормальная в коде

Офлайн

#5 Июль 17, 2019 03:13:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8682
Репутация: +  770  -
Профиль   Отправить e-mail  

Python PyQt5 QLabel Обновление данных

dima_ikar
не могу понять почему при нажатии кнопок не обновляются данные окна
Чтобы это понять, ты должен вставить print'ы во всех местах, где протекают данные при нажатии кнопки, а потом запустить программу из консоли, чтобы эти print'ы в консоль вывелись. И там нужно смотреть и убеждаться, что у тебя правильно всё срабатывает.
Ошибка здесь может быть в куче мест, да ещё и не одна, а много сразу.

dima_ikar
Нет табуляция у меня нормальная в коде
Мы не можем взять твой код, скопировать его себе и запустить. Он не будет работать. Почему? Потому что отступы у тебя неправильные. Обычно мы копируем его себе, подменяем базу данных на пустышку, запускаем и смотрим, как работают кнопки.



Отредактировано py.user.next (Июль 17, 2019 03:14:12)

Офлайн

#6 Июль 17, 2019 10:45:59

dima_ikar
Зарегистрирован: 2019-05-03
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Python PyQt5 QLabel Обновление данных

 from PyQt5 import QtGui
from PyQt5.QtWidgets import QApplication, QDialog, QPushButton, QMessageBox
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import pymysql.cursors
import pymysql
pymysql.install_as_MySQLdb()
import MySQLdb
 
class Winop(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        db = MySQLdb.connect("", "", "", "")
#        QMessageBox.about(self, 'Connection', 'Database Connected Successfully')
        self.kolstrok = 1
        cursor = db.cursor()
        cursor.execute("select count(*) from list_device")
        self.kolnew = cursor.fetchone()[0]
        self.Bazaset()
    def Bazaset(self):
        ip = 0
        self.Winset()
# db------------------------------------------------------------------------------------
        try:
            db = MySQLdb.connect("", "", "", "")
            cursor = db.cursor()
            cursor.execute("select device_id, ip from list_device  WHERE device_id=" +str(self.kolstrok))
            for row_ip in cursor.fetchall():
                ip = row_ip[1]
                cursor.execute("select * from _data_in_memory  WHERE device_id=" +str(self.kolstrok))
                self.label.lab = QtWidgets.QLabel(self)
                font = QtGui.QFont()
                font.setFamily("Times New Roman")
                self.setFont(font)
                font.setPointSize(10)
                self.label.lab.setFont(font)
                self.label.lab.setGeometry(QtCore.QRect(10, 20, 295, 20))
                self.label.lab.setText("Ip                           " + ip)
                print(ip)
                for row_dan in cursor.fetchall():
                    self.label.lab1 = QtWidgets.QLabel(self)
                    self.label.lab1.setGeometry(QtCore.QRect(10, 40, 140, 20))
                    self.label.lab1.setText("internal temperature В°C")
                    self.label.lab11 = QtWidgets.QLabel(self)
                    self.label.lab11.setGeometry(QtCore.QRect(160, 40, 100, 20))
                    self.label.lab11.setText(row_dan[2])
                    
            db.close()
        except MySQLdb.Error as e:
            QMessageBox.about(self, 'Connection', 'Failed To Connect Database')
            sys.exit(1)
# db --------------------------------------------------------------------------------
    def Winset(self):
        self.window_height = 300
        self.window_width = 500
        self.setObjectName("menu")
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        self.setFont(font)
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.setFixedSize(self.window_height, self.window_width)
        self.setWindowIcon(QIcon('logo1.png'))
        self.setWindowTitle("Teco monitoring")
        oImage = QImage("6706.jpg")
        sImage = oImage.scaled(QSize(self.window_height, self.window_width))
        palette = QPalette()
        palette.setBrush(QPalette.Window, QBrush(sImage))
        self.setPalette(palette)
        self.label = QtWidgets.QLabel(self)
        self.label.setFont(font)
        self.label.setGeometry(QtCore.QRect(100, 5, 101, 20))
        self.label.setText("Current values")
        self.previous = QtWidgets.QPushButton(self)
        self.previous.setGeometry(QtCore.QRect(20, 450, 70, 23))
        self.previous.setFont(font)
        self.previous.setObjectName("Previous")
        self.previous.clicked.connect(self.minus)
        self.previous.setText("Previous")
        self.next = QtWidgets.QPushButton(self)
        self.next.setGeometry(QtCore.QRect(200, 450, 70, 23))
        self.next.setFont(font)
        self.next.setObjectName("Next")
        self.next.clicked.connect(self.plus)
        self.next.setText("Next")
    def plus(self):
        self.kolstrok = self.kolstrok + 1
        if (self.kolstrok > self.kolnew):
            self.kolstrok = 1
        else:
            self.kolstrok = 2
            self.Bazaset()
    def minus(self):
        self.kolstrok = self.kolstrok - 1
        if (self.kolstrok == 0):
            self.kolstrok = 1
            self.Bazaset()
# END ------------------------------------------------------------------------
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    F2_window = Winop()
    F2_window.show()
    sys.exit(app.exec_())

Офлайн

#7 Июль 17, 2019 10:46:34

dima_ikar
Зарегистрирован: 2019-05-03
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Python PyQt5 QLabel Обновление данных

py.user.next

сори сайт что то резал - сверху мой код полностью

Офлайн

#8 Июль 17, 2019 11:03:06

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2569
Репутация: +  178  -
Профиль   Отправить e-mail  

Python PyQt5 QLabel Обновление данных

1) Используй дизайнер
2) В методе Bazaset у тебя шизофрения. Сделай виджет нормальной таблицы и выводи в него данные, а не создавай кучу QLabel-ов.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Июль 17, 2019 11:29:27

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Python PyQt5 QLabel Обновление данных

Офлайн

#10 Июль 17, 2019 16:34:28

dima_ikar
Зарегистрирован: 2019-05-03
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Python PyQt5 QLabel Обновление данных

Вот мой пример на таблице - блин что я делаю не так

 from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import time
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QApplication, QTableView
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import pymysql.cursors
import pymysql
pymysql.install_as_MySQLdb()
import MySQLdb
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QDialog, QDialogButtonBox,
        QHBoxLayout, QMessageBox, QPushButton, QTableView)
from PyQt5.QtSql import QSqlTableModel
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QTableView
from PyQt5.QtSql import QSqlTableModel
try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s
class Widget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.starw()
    def starw(self):
        self.window_height = 300
        self.window_width = 600
        self.setFixedSize(self.window_height, self.window_width)
        self.setWindowIcon(QIcon('logo1.png'))
        self.setWindowTitle("Teco monitoring")
        layout = QtWidgets.QVBoxLayout(self)
        btn_layout = QtWidgets.QHBoxLayout()
        btn1 = QtWidgets.QPushButton("Previous")
        btn2 = QtWidgets.QPushButton("Quit")
        btn3 = QtWidgets.QPushButton("Next")
        btn_layout.addWidget(btn1)
        btn_layout.addWidget(btn2)
        btn_layout.addWidget(btn3)
        btn1.clicked.connect(self.minus)
        btn2.clicked.connect(QCoreApplication.instance().quit)
        btn3.clicked.connect(self.plus)
        table = QtWidgets.QTableWidget()
        table.setRowCount(6)
        table.setColumnCount(2)
        table.setHorizontalHeaderLabels(["Mark", "Devise"])
        table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        layout.addWidget(table)
        layout.addLayout(btn_layout)
        self.baza(table)
    def baza(self, table):
        self.kolstrok = 1
        db = MySQLdb.connect("", "", "", "")
#        print("connect DB successful!!")
        cursor = db.cursor()
        cursor.execute("select * from _data_in_memory  WHERE device_id=" + str(self.kolstrok))
        for dan in cursor.fetchall():
            print(self.kolstrok)
            table.setItem(0, 0, QTableWidgetItem("IP"))
            table.setItem(0, 1, QTableWidgetItem(str(dan[0])))
            table.setItem(1, 0, QTableWidgetItem("Titul"))
            table.setItem(1, 1, QTableWidgetItem(str(self.kolstrok)))
            table.setItem(2, 0, QTableWidgetItem("Model"))
            table.setItem(2, 1, QTableWidgetItem(dan[2]))
            table.setItem(3, 0, QTableWidgetItem("Mame"))
            table.setItem(3, 1, QTableWidgetItem(dan[3]))
            table.setItem(4, 0, QTableWidgetItem("Regoin"))
            table.setItem(4, 1, QTableWidgetItem(dan[4]))
            table.setItem(5, 0, QTableWidgetItem("Adres"))
            table.setItem(5, 1, QTableWidgetItem(dan[5]))
    
    def plus(self):
        self.kolstrok = str(self.kolstrok + 1)
        if (self.kolstrok > self.kolnew):
            self.kolstrok = 1
        else:
            self.kolstrok = 2
        print(self.kolstrok)
        self.baza()
    def minus(self):
        self.kolstrok = str(self.kolstrok - 1)
        if (self.kolstrok == 0):
            self.kolstrok = 1
        print(self.kolstrok)
        self.baza()
if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    w = Widget()
    w.show()
    app.exec()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version