Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
PyQt5, Problema con mostrar texto en un label al pulsar botón. Problema de Refresco?
#1
Hola a todos!

soy nuevo en el foro y también en Python.
el Problema que tengo es bastante sencillo, seguramente.
El tipico Hello world. Se pulsa un Pushbutton y sale en un label texto. Pues el problema es que el texto sale solo si cambio el tamaño de la ventana. En cambio si hago lo mismo con un Checkbox. Sale el Texto inmediatamente.pq?
Qué puedo hacer? 
Muchas gracias de antemano

Código:
# el código es para guarrear y aprender los diferentes Widgets en QT y python.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import * #QApplication, QWidget, QPushButton, QLabel, QToolTip, QAbstractButton,QDateTimeEdit,QDateEdit,QTimeEdit
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Ui_MainWindow(object):

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(582, 456)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label1 = QtWidgets.QLabel(self.centralwidget)
        self.label1.setEnabled(True)
        self.label1.setGeometry(QtCore.QRect(20, 12, 291, 91))
        self.label1.setText("")
        self.label1.setObjectName("label1")
        self.pushButton1 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton1.setGeometry(QtCore.QRect(144, 180, 112, 32))
        self.pushButton1.setObjectName("pushButton1")
        self.pushButton2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton2.setGeometry(QtCore.QRect(30, 180, 112, 32))
        self.pushButton2.setObjectName("pushButton2")
        self.checkBox1 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox1.setGeometry(QtCore.QRect(10, 130, 86, 20))
        self.checkBox1.setObjectName("checkBox1")
        self.lcdNumber1 = QtWidgets.QLCDNumber(self.centralwidget)
        self.lcdNumber1.setGeometry(QtCore.QRect(110, 220, 64, 23))
        self.lcdNumber1.setObjectName("lcdNumber1")
        self.lineEdit1 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit1.setGeometry(QtCore.QRect(150, 130, 113, 21))
        self.lineEdit1.setObjectName("lineEdit1")
        self.horizontalSlider1 = QtWidgets.QSlider(self.centralwidget)
        self.horizontalSlider1.setGeometry(QtCore.QRect(50, 270, 160, 22))
        self.horizontalSlider1.setMaximum(100)
        self.horizontalSlider1.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider1.setObjectName("horizontalSlider1")
        self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.centralwidget)
        self.dateTimeEdit.setGeometry(QtCore.QRect(340, 180, 194, 22))
        self.dateTimeEdit.setObjectName("dateTimeEdit")
        self.pushButtonTime = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonTime.setGeometry(QtCore.QRect(340, 230, 112, 32))
        self.pushButtonTime.setObjectName("pushButtonTime")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 582, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.pushButton1.clicked.connect(self.printButtonPressed) # PASA con este Boton por ejemplo!
        self.pushButton2.clicked.connect(QtCore.QCoreApplication.instance().quit)# Pushbutton Exit
        self.pushButtonTime.clicked.connect(self.settingDateTime) # PASA con este Boton por ejemplo!

        self.checkBox1.clicked.connect(self.checkboxChanged)


        self.lineEdit1.textChanged.connect(self.textChanged) # De esta forma se hace dinamico el cambio de Texto

        self.horizontalSlider1.valueChanged.connect(self.LCDBox)

        self.dateTimeEdit.dateTimeChanged.connect(self.settingDateTime)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Testing bench"))
        self.pushButton2.setText(_translate("MainWindow", "Exit"))
        self.pushButton1.setText(_translate("MainWindow", "Push Me!"))
        self.checkBox1.setText(_translate("MainWindow", "CheckBox"))
        self.pushButtonTime.setText(_translate("MainWindow", "Date and Time"))


    def printButtonPressed(self): #Este método
        # This is executed when the button is pressed
        print('printButtonPressed')
        self.label1.setText("")
        self.label1.setText("Hello!!")

    def checkboxChanged(self):
        self.label1.setText("")
        self.label1.setText("True" if self.checkBox1.checkState() else
                            "False")
    def LCDBox(self,event):
        print(event)
        self.lcdNumber1.display(event)

    def textChanged(self,text):
        #self.label1.setText(self.lineEdit1.text())  // Sino pongo en el parametro Text, tengo q poner self.lineEdit1.text()
        self.label1.setText(text)

    def settingDateTime(self):
        act_Date = QtCore.QDate.currentDate()
        act_Time = QtCore.QTime.currentTime()
        act_DateTime = QtCore.QDateTime.currentDateTime()
        In_Date = self.dateTimeEdit.date()
        In_Time = self.dateTimeEdit.time()

        #xmas2 = QtCore.QDate(2020,12,24)
        xmas2 = QtCore.QDate(In_Date)


        print("1)" + " " + act_Date.toString() + " " + act_Time.toString())
        print("2)" + " " + act_Date.toString(Qt.ISODate))
        print("3)" + " " + act_DateTime.toString(Qt.DefaultLocaleLongDate))

        nofdays = act_Date.daysTo(xmas2)
        print("4)" + " " + f"There are {nofdays} days until next Xmas")
        self.label1.setText("4)" + " " + f"There are {nofdays} days until next Xmas")
       


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
Responder
#2
Hola, bienvenido.

Yo acabo de probar el código, y al presionar el botón inmediatamente cambia el texto del label. ¿Vos decís que tenés que redimensionar la ventana para que se actualice el texto? ¿En qué sistema operativo lo estás ejecutando?

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(22-11-2020, 01:05 AM)Francisco escribió: Hola, bienvenido.

Yo acabo de probar el código, y al presionar el botón inmediatamente cambia el texto del label. ¿Vos decís que tenés que redimensionar la ventana para que se actualice el texto? ¿En qué sistema operativo lo estás ejecutando?

Saludos

Hola Francisco,

mi sistema operativo es MacOs Catalina 10,15.7. y trabajo con el Qt Creator 4.13.3 ,Pycharm 2020.2.3. 
Lo curioso es que solo pasa con los PushButton, con el Checklist, cambia inmediatamente el texto.
Tienes alguna idea de lo que puede ser?entonces no es error de programación no?
Responder
#4
Hola.

Es raro. Intentá agregando un self.label1.update() después del setText(), como para forzar una actualización del texto. Parece ser algo más específico de Qt en Mac, no hay ningún error en el código.

Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 4 invitado(s)