Найти - Пользователи
Полная версия: Python PyQt5 QLabel Обновление данных
Начало » GUI » Python PyQt5 QLabel Обновление данных
1 2
dima_ikar
Я понимаю что тема очень заезженная, НО если есть возможность помогите - не могу понять почему при нажатии кнопок не обновляются данные окна. Кто может прочитать мой код и подсказать где ошибка Программа берет данные и вставляет их в 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
dima_ikar
не могу понять почему при нажатии кнопок не обновляются данные окна
Ну отлично, зачем вы такую портянку вывалили? Конект к базе, шрифты, иконки - это все не имеет отношения к вопросу, и просто запутывает. Сделайте просто одно окно, даже без заголовка, с одной кнопкой и с одним лэйблом. Сделать хэндлер нажатия на кнопку, который одновляет лэйбл. Покажите код.
vic57
class Winop(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
db = MySQLdb.connect(“0.0.0.0”, “im”, “”, “app”)
self.kolstrok = 1
вы реально с такой табуляцией пишете? где отступы?
dima_ikar
vic57
Нет табуляция у меня нормальная в коде
py.user.next
dima_ikar
не могу понять почему при нажатии кнопок не обновляются данные окна
Чтобы это понять, ты должен вставить print'ы во всех местах, где протекают данные при нажатии кнопки, а потом запустить программу из консоли, чтобы эти print'ы в консоль вывелись. И там нужно смотреть и убеждаться, что у тебя правильно всё срабатывает.
Ошибка здесь может быть в куче мест, да ещё и не одна, а много сразу.

dima_ikar
Нет табуляция у меня нормальная в коде
Мы не можем взять твой код, скопировать его себе и запустить. Он не будет работать. Почему? Потому что отступы у тебя неправильные. Обычно мы копируем его себе, подменяем базу данных на пустышку, запускаем и смотрим, как работают кнопки.
dima_ikar
 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_())
dima_ikar
py.user.next

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

 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()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB