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

  1. # el código es para guarrear y aprender los diferentes Widgets en QT y python.
  2. from PyQt5 import QtCore, QtGui, QtWidgets
  3. from PyQt5.QtWidgets import * #QApplication, QWidget, QPushButton, QLabel, QToolTip, QAbstractButton,QDateTimeEdit,QDateEdit,QTimeEdit
  4. from PyQt5.QtGui import *
  5. from PyQt5.QtCore import *
  6.  
  7. class Ui_MainWindow(object):
  8.  
  9.     def setupUi(self, MainWindow):
  10.         MainWindow.setObjectName("MainWindow")
  11.         MainWindow.resize(582, 456)
  12.         self.centralwidget = QtWidgets.QWidget(MainWindow)
  13.         self.centralwidget.setObjectName("centralwidget")
  14.         self.label1 = QtWidgets.QLabel(self.centralwidget)
  15.         self.label1.setEnabled(True)
  16.         self.label1.setGeometry(QtCore.QRect(20, 12, 291, 91))
  17.         self.label1.setText("")
  18.         self.label1.setObjectName("label1")
  19.         self.pushButton1 = QtWidgets.QPushButton(self.centralwidget)
  20.         self.pushButton1.setGeometry(QtCore.QRect(144, 180, 112, 32))
  21.         self.pushButton1.setObjectName("pushButton1")
  22.         self.pushButton2 = QtWidgets.QPushButton(self.centralwidget)
  23.         self.pushButton2.setGeometry(QtCore.QRect(30, 180, 112, 32))
  24.         self.pushButton2.setObjectName("pushButton2")
  25.         self.checkBox1 = QtWidgets.QCheckBox(self.centralwidget)
  26.         self.checkBox1.setGeometry(QtCore.QRect(10, 130, 86, 20))
  27.         self.checkBox1.setObjectName("checkBox1")
  28.         self.lcdNumber1 = QtWidgets.QLCDNumber(self.centralwidget)
  29.         self.lcdNumber1.setGeometry(QtCore.QRect(110, 220, 64, 23))
  30.         self.lcdNumber1.setObjectName("lcdNumber1")
  31.         self.lineEdit1 = QtWidgets.QLineEdit(self.centralwidget)
  32.         self.lineEdit1.setGeometry(QtCore.QRect(150, 130, 113, 21))
  33.         self.lineEdit1.setObjectName("lineEdit1")
  34.         self.horizontalSlider1 = QtWidgets.QSlider(self.centralwidget)
  35.         self.horizontalSlider1.setGeometry(QtCore.QRect(50, 270, 160, 22))
  36.         self.horizontalSlider1.setMaximum(100)
  37.         self.horizontalSlider1.setOrientation(QtCore.Qt.Horizontal)
  38.         self.horizontalSlider1.setObjectName("horizontalSlider1")
  39.         self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.centralwidget)
  40.         self.dateTimeEdit.setGeometry(QtCore.QRect(340, 180, 194, 22))
  41.         self.dateTimeEdit.setObjectName("dateTimeEdit")
  42.         self.pushButtonTime = QtWidgets.QPushButton(self.centralwidget)
  43.         self.pushButtonTime.setGeometry(QtCore.QRect(340, 230, 112, 32))
  44.         self.pushButtonTime.setObjectName("pushButtonTime")
  45.         MainWindow.setCentralWidget(self.centralwidget)
  46.         self.menubar = QtWidgets.QMenuBar(MainWindow)
  47.         self.menubar.setGeometry(QtCore.QRect(0, 0, 582, 22))
  48.         self.menubar.setObjectName("menubar")
  49.         MainWindow.setMenuBar(self.menubar)
  50.         self.statusbar = QtWidgets.QStatusBar(MainWindow)
  51.         self.statusbar.setObjectName("statusbar")
  52.         MainWindow.setStatusBar(self.statusbar)
  53.  
  54.         self.retranslateUi(MainWindow)
  55.         QtCore.QMetaObject.connectSlotsByName(MainWindow)
  56.  
  57.         self.pushButton1.clicked.connect(self.printButtonPressed) # PASA con este Boton por ejemplo!
  58.         self.pushButton2.clicked.connect(QtCore.QCoreApplication.instance().quit)# Pushbutton Exit
  59.         self.pushButtonTime.clicked.connect(self.settingDateTime) # PASA con este Boton por ejemplo!
  60.  
  61.         self.checkBox1.clicked.connect(self.checkboxChanged)
  62.  
  63.  
  64.         self.lineEdit1.textChanged.connect(self.textChanged) # De esta forma se hace dinamico el cambio de Texto
  65.  
  66.         self.horizontalSlider1.valueChanged.connect(self.LCDBox)
  67.  
  68.         self.dateTimeEdit.dateTimeChanged.connect(self.settingDateTime)
  69.  
  70.     def retranslateUi(self, MainWindow):
  71.         _translate = QtCore.QCoreApplication.translate
  72.         MainWindow.setWindowTitle(_translate("MainWindow", "Testing bench"))
  73.         self.pushButton2.setText(_translate("MainWindow", "Exit"))
  74.         self.pushButton1.setText(_translate("MainWindow", "Push Me!"))
  75.         self.checkBox1.setText(_translate("MainWindow", "CheckBox"))
  76.         self.pushButtonTime.setText(_translate("MainWindow", "Date and Time"))
  77.  
  78.  
  79.     def printButtonPressed(self): #Este método
  80.         # This is executed when the button is pressed
  81.         print('printButtonPressed')
  82.         self.label1.setText("")
  83.         self.label1.setText("Hello!!")
  84.  
  85.     def checkboxChanged(self):
  86.         self.label1.setText("")
  87.         self.label1.setText("True" if self.checkBox1.checkState() else
  88.                             "False")
  89.     def LCDBox(self,event):
  90.         print(event)
  91.         self.lcdNumber1.display(event)
  92.  
  93.     def textChanged(self,text):
  94.         #self.label1.setText(self.lineEdit1.text())  // Sino pongo en el parametro Text, tengo q poner self.lineEdit1.text()
  95.         self.label1.setText(text)
  96.  
  97.     def settingDateTime(self):
  98.         act_Date = QtCore.QDate.currentDate()
  99.         act_Time = QtCore.QTime.currentTime()
  100.         act_DateTime = QtCore.QDateTime.currentDateTime()
  101.         In_Date = self.dateTimeEdit.date()
  102.         In_Time = self.dateTimeEdit.time()
  103.  
  104.         #xmas2 = QtCore.QDate(2020,12,24)
  105.         xmas2 = QtCore.QDate(In_Date)
  106.  
  107.  
  108.         print("1)" + " " + act_Date.toString() + " " + act_Time.toString())
  109.         print("2)" + " " + act_Date.toString(Qt.ISODate))
  110.         print("3)" + " " + act_DateTime.toString(Qt.DefaultLocaleLongDate))
  111.  
  112.         nofdays = act_Date.daysTo(xmas2)
  113.         print("4)" + " " + f"There are {nofdays} days until next Xmas")
  114.         self.label1.setText("4)" + " " + f"There are {nofdays} days until next Xmas")
  115.        
  116.  
  117.  
  118. if __name__ == "__main__":
  119.     import sys
  120.     app = QtWidgets.QApplication(sys.argv)
  121.     MainWindow = QtWidgets.QMainWindow()
  122.     ui = Ui_MainWindow()
  123.     ui.setupUi(MainWindow)
  124.     MainWindow.show()
  125.     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
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!
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)