Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Botón se ejecuta al presionar Enter Qt5
#1
Buenas tardes,

Soy nuevo en Python y QT, estoy haciendo una pequeña aplicación donde al introducir una cadena en HEX me la convierte a decimal. Hasta este punto no tengo problemas, el problema es que mi clase ejecuta todos los métodos después de que se introduce una cadena en un QLineedit y se da enter, se ejecuta otro método además del que tengo el connect a QLineedit.

En algún momento logré hacerlo funcionar pero tuve que borrar todo en mi equipo y no respalde mi código, ahora que estoy reescribiendo, no  puedo solucionarlo.

El método borra se ejecuta inmediatamente después del método convierte.

Alguna sugerencia para que se mande llamar solo un método?

Código:
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton
from EPCWindow import EPC_Dialog

class MainWindow(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = EPC_Dialog()
        self.ui.setupUi(self)

        self.ui.ln_epc.setFocus()
        self.ui.ln_epc.returnPressed.connect(self.convierte)
        self.ui.pushButton.clicked.connect(self.borra)


    def convierte(self):
        lv_epc = self.ui.ln_epc.text()
        lv_card = lv_epc[8:14]
        lv_card_out = (int(lv_card,16))
        self.ui.lbl_8hout.setText(str(lv_card_out))

        lv_2h = lv_epc[8:10]
        lv_4h = lv_epc[10:14]
        lv_2h_out = str((int(lv_2h, 16)))
        lv_4h_out = str((int(lv_4h, 16)))
        lv_2h_4h_out = lv_2h_out + ", " + lv_4h_out
        self.ui.lbl_2hout.setText(lv_2h_4h_out)

    def borra(self):
        self.ui.ln_epc.clear()
        self.ui.lbl_2hout.clear()
        self.ui.lbl_8hout.clear()
        self.ui.ln_epc.setFocus()

# Main Program
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ventana = MainWindow()
    ventana.show()
    sys.exit(app.exec_())


Código:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'EPCWindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class EPC_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.setWindowModality(QtCore.Qt.NonModal)
        Dialog.resize(320, 170)
        self.lbl_epc = QtWidgets.QLabel(Dialog)
        self.lbl_epc.setGeometry(QtCore.QRect(20, 24, 50, 14))
        self.lbl_epc.setMinimumSize(QtCore.QSize(50, 14))
        self.lbl_epc.setMaximumSize(QtCore.QSize(50, 14))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.lbl_epc.setFont(font)
        self.lbl_epc.setObjectName("lbl_epc")
        self.lbl_8hout = QtWidgets.QLabel(Dialog)
        self.lbl_8hout.setGeometry(QtCore.QRect(100, 57, 200, 22))
        self.lbl_8hout.setMinimumSize(QtCore.QSize(200, 22))
        self.lbl_8hout.setMaximumSize(QtCore.QSize(200, 22))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.lbl_8hout.setFont(font)
        self.lbl_8hout.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.lbl_8hout.setFrameShape(QtWidgets.QFrame.Box)
        self.lbl_8hout.setText("")
        self.lbl_8hout.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.lbl_8hout.setObjectName("lbl_8hout")
        self.lbl_2hout = QtWidgets.QLabel(Dialog)
        self.lbl_2hout.setGeometry(QtCore.QRect(100, 94, 200, 22))
        self.lbl_2hout.setMinimumSize(QtCore.QSize(200, 22))
        self.lbl_2hout.setMaximumSize(QtCore.QSize(200, 22))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.lbl_2hout.setFont(font)
        self.lbl_2hout.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.lbl_2hout.setFrameShape(QtWidgets.QFrame.Box)
        self.lbl_2hout.setText("")
        self.lbl_2hout.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.lbl_2hout.setObjectName("lbl_2hout")
        self.lbl_2h = QtWidgets.QLabel(Dialog)
        self.lbl_2h.setGeometry(QtCore.QRect(20, 98, 60, 14))
        self.lbl_2h.setMinimumSize(QtCore.QSize(60, 14))
        self.lbl_2h.setMaximumSize(QtCore.QSize(60, 14))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.lbl_2h.setFont(font)
        self.lbl_2h.setObjectName("lbl_2h")
        self.lbl_8h = QtWidgets.QLabel(Dialog)
        self.lbl_8h.setGeometry(QtCore.QRect(20, 61, 60, 14))
        self.lbl_8h.setMinimumSize(QtCore.QSize(60, 14))
        self.lbl_8h.setMaximumSize(QtCore.QSize(60, 14))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.lbl_8h.setFont(font)
        self.lbl_8h.setObjectName("lbl_8h")
        self.ln_epc = QtWidgets.QLineEdit(Dialog)
        self.ln_epc.setGeometry(QtCore.QRect(100, 20, 200, 22))
        self.ln_epc.setMinimumSize(QtCore.QSize(200, 22))
        self.ln_epc.setMaximumSize(QtCore.QSize(200, 22))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.ln_epc.setFont(font)
        self.ln_epc.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
        self.ln_epc.setAcceptDrops(True)
        self.ln_epc.setMaxLength(26)
        self.ln_epc.setClearButtonEnabled(False)
        self.ln_epc.setObjectName("ln_epc")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(225, 130, 75, 23))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")

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

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.lbl_epc.setText(_translate("Dialog", "EPC:"))
        self.lbl_2h.setText(_translate("Dialog", "2H + 4H"))
        self.lbl_8h.setText(_translate("Dialog", "8H -> 10D"))
        self.pushButton.setText(_translate("Dialog", "Clear"))
Responder
#2
Hola, bienvenido.

El método borra() se ejecuta al presionar Enter porque tu botón pushButton tiene el foco. Deberías indicarle vía Qt Designer que no reciba el foco, o vía código, así:

  1. self.ui = EPC_Dialog()
  2. self.ui.setupUi(self)
  3. self.ui.pushButton.setFocusPolicy(Qt.NoFocus)


Saludos
Responder
#3
Excelente, muchas gracias por tu ayuda, me ha funcionado de maravilla tu ayuda. cierro el hilo.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)