Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
¿Donde se realiza la codificación en QT Designer.?
#1
Hola Francisco, ¿cómo estás?, hola gente.-
Qué flor de dilema, tengo, les cuento lo que estoy haciendo,
creo la ventana con los correspondientes componentes con Designer
luego a partir del código "ventana.ui" lo paso a "ventana.py" hasta
allí todo bien, pero ahora cuando quiero sumar 2 números no sé cómo codificarlo
¿me podrían ayudar?

Código:
# Form implementation generated from reading ui file 'ventana.ui'
#
# Created by: PyQt6 UI code generator 6.3.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(320, 240)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(110, 120, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.lineEditUno = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEditUno.setGeometry(QtCore.QRect(20, 10, 91, 20))
        self.lineEditUno.setObjectName("lineEditUno")
        self.lineEditDos = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEditDos.setGeometry(QtCore.QRect(130, 10, 91, 20))
        self.lineEditDos.setObjectName("lineEditDos")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 60, 47, 13))
        self.label.setText("")
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 320, 21))
        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)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Resultado"))


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())


Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#2
Hola, Daniel, ¿cómo estás?

No te conviene modificar el código generado por Qt Designer. Mejor, hace esto desde otro archivo:

Código:
from ventana import Ui_MainWindow

import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec())

Después de la llamada a setupUi(), podés asociar, por ejemplo, tu pushButton a una función, igual que en tkinter, para que haga la suma o lo que sea:

Código:
ui.pushButton.clicked.connect(sumar)

Saludos
Responder
#3
Hola gente, buen día para todos.
Francisco, gracias por el código, me ayudo muchísimo,
primero ser sincero y decirte que no corrí tu código porque
mientras esperaba tu respuesta había iniciado con otro blog,
leyendo tu código me surge una pregunta ¿se puede programar
sin utilizar clases(POO)?
Dejo lo que logre y no te miento cuando digo que me ayudaste
muchísimo, por ej. esta línea me da error.
app.exec_()

en cambio, con esta todo ok.
sys.exit(app.exec())

Código:
from ventana_ui import *            #Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)
        self.labelMensaje.setText("Haz clic en el botón")
        self.pushButtonPulsar.setText("Presióname")
        self.pushButtonPulsar.clicked.connect(self.actualizar)


    def actualizar(self):
        self.labelMensaje.setText("¡Acabas de hacer clic en el botón!")

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication([])
    window = MainWindow()
    window.show()
    sys.exit(app.exec())



Un abrazo y nuevamente gracia.-
Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#4
Hola, Daniel.

Perfecto. Lo del exec() / exec_(), depende de la versión de Python y de PyQt/PySide. En Python 2 exec es una palabra reservada, por lo cual no puede haber funciones con ese nombre, de ahí el guión bajo.

En cuanto a la orientación a objetos, se puede trabajar sin crear tus propias clases, igual que en Tk. O sea, todo lo que hiciste en el __init__() lo podés hacer también afuera:

Código:
window = MainWindow()
window.labelMensaje.setText("Haz clic en el botón")
window.pushButtonPulsar.setText("Presióname")
window.pushButtonPulsar.clicked.connect(actualizar)

Pero toda la librería Qt, igual que Tk, está orientada a objetos (cada widget es una clase).

Saludos
Responder
#5
Hola Francisco, gracias y te cuento que tengo muchas ganas de borrar la cuenta Big Grin Big Grin Big Grin ,

son tantas las preguntas por el entusiasmo que siento que tengo "temor" a ponerme
pesado, pero bueno espero que me dé resultado mi estudio de
más de 30 años de control mental,igual esta la necesito.

¿Como hacer una validación al salir de un campo de texto(LineEdit), me podrías poner
un ej.?

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#6
Hola, Daniel.

No hay ningún problema con las preguntas, para eso es el foro Wink. Me alegra que te estés entusiasmando con Qt, es muy apasionante realmente! En cuanto a la pregunta, podés usar la señal editingFinished del QLineEdit, que se emite cuando la caja de texto pierde el foco o se presiona Enter, siempre y cuando haya habido modificaciones en el contenido:

Código:
from PyQt6.QtWidgets import QApplication, QMainWindow, QLineEdit

def editingFinished():
    print("Validar")

app = QApplication([])
main_window = QMainWindow()
line_edit = QLineEdit(main_window)
line_edit.setGeometry(10, 10, 200, 25)
line_edit.editingFinished.connect(editingFinished)
main_window.show()
app.exec()

Si necesitás, creá otro tema tranquilo para esta cuestión del QLineEdit, así queda mejor organizada la información en el foro.

Saludos
Responder
#7
Hola Francisco, estoy muy bien, gracias y como siempre todo ok.
Porque no recopilas estos últimos datos y haces vos mismo un nuevo
tema, te lo digo porque tuve que retroceder para estudiar en profundidad
la POO y no estoy seguro, pero voy a intentar dejar QT un tanto en suspenso
y continuar con la POO.-

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#8
No hay problema, Daniel. Cualquier cosa preguntanos.

Saludos
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)