Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
sub ventana no funcional en Qt
#1
Hola buenas tardes a todos...
tengo un inconveniente  archivo (app.py) en el cual uno de sus botones tiene la funcion de abrir otra ventana (combo.py) donde cargo datos a dos combo box, ahora si corro combo.py  directamente los datos ingrsados en el line edit se guardan en la base de datos pero si corro app.py y llamo a la ventana combo desde ahi al ingresar datos en el line edit y presionar el boton correspondiente no pasa nada, ni siquiera recibo un error. 
Por ahi el codigo no sea muy eficiente o haya cosas de mas, peo recien llevo dos meses asi que ire mejorando eso tamien...
ahi les dejo el codigo  si me ayudan orientandome por donde ir se los agradecere...


app.py:
Código:
import sys
from PySide6 import QtWidgets
from mysql import connector
from mysql.connector.optionfiles import DEFAULT_EXTENSIONS
from database.connection import create_connection
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QTableWidgetItem, QDialog
from database import recipes as dat
from views.main_window import MainWindow
from combo import MainWindowCombo
from database import baseCombo as BC



class MainWindowForm (QMainWindow, QDialog, MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        #self.leer_bd()
        self.inicio()
       
        self.boton_agregar.clicked.connect(self.agregar)
        self.boton_agregar.clicked.connect(self.inicio)
        self.boton_actualizar.clicked.connect(self.leer_bd)
        self.boton_editar.clicked.connect(self.edit_tabla)
        self.boton_editar.clicked.connect(self.inicio)
        self.boton_eliminar.clicked.connect(self.borra_tabla)
        self.boton_eliminar.clicked.connect(self.inicio)
        self.boton_actualizar.clicked.connect(self.combo_ventana)
       


    def combo_ventana(self):
        self.ventana = QtWidgets.QMainWindow()
        self.ui=MainWindowCombo()
        self.ui.setupUi(self.ventana)
        self.ventana.show()
       


    def leer_bd(self):
        conn = create_connection()
        sql = """SELECT id, articulo, cantidad, talle, color, costo, ganancia, precio FROM nombre"""
        try:
            cur = conn.cursor()
            cur.execute(sql)
            DatosBase = cur.fetchall()
            row = 0
            for i, (id, articulo, cantidad, talle, color, costo, ganancia, precio) in enumerate (DatosBase):
                self.productos_table_widget.setRowCount(row+1)
                self.productos_table_widget.setItem(i, 0, QTableWidgetItem(str(id)))
                self.productos_table_widget.setItem(i, 1, QTableWidgetItem(str(articulo)))
                self.productos_table_widget.setItem(i, 2, QTableWidgetItem(str(cantidad)))
                self.productos_table_widget.setItem(i, 3, QTableWidgetItem(str(talle)))
                self.productos_table_widget.setItem(i, 4, QTableWidgetItem(str(color)))
                self.productos_table_widget.setItem(i, 5, QTableWidgetItem(str(costo)))
                self.productos_table_widget.setItem(i, 6, QTableWidgetItem(str(ganancia)))
                self.productos_table_widget.setItem(i, 7, QTableWidgetItem(str(precio)))
               

               

                row +=1
            #return DatosBase
        except connector.Error as err:
            print(f"Error at select_all function: {err.msg}")
            return False
        finally:
            cur.close()
            conn.close()
       
    
    def agregar(self):

        articulo = self.articulo_line_edit.text()
        cantidad = self.cantidad_line_edit.text()
        talle = self.combo_talle.currentText()
        color = self.combo_color.currentText()
        costo = self.costo_line_edit.text()
        ganancia = self.ganancia_line_edit.text()
        precio = float(costo) * float(ganancia) /100 + float(costo)

        data = (articulo, int(cantidad), str(talle), color, float(costo), float(ganancia), float(precio))
        copia = (articulo, talle, color)
       
       

        if dat.insert(data, copia):
            print("articulo agregado")
            self.clear_inputs()
           


    def edit_tabla(self):

        articulo = self.articulo_line_edit.text()
        costo = self.costo_line_edit.text()
       
        UpTabla = (float(costo), articulo)
        CostoArt = (float(costo), articulo)
       

        if dat.editar(UpTabla, CostoArt):
            print("articulo editado")
            self.clear_inputs()
   
           
          

    def clear_inputs(self):
        self.articulo_line_edit.clear()
        self.cantidad_line_edit.clear()
        self.costo_line_edit.clear()
        self.ganancia_line_edit.clear()
        self.precio_line_edit.clear()

    def borra_tabla (self):
        articulo = self.articulo_line_edit.text()
        talle = self.combo_talle.currentText()
        color = self.combo_color.currentText()
        delT = (articulo, talle, color)

        if dat.borrar(delT):
            print("articulo borrado")
            self.clear_inputs()



   


    def inicio(self):
        c = 0
        while c == 0:
            self.leer_bd()
            c+=1




       

   
if __name__ == '__main__':
    app = QApplication()
    app.setStyle('Fusion')

    window = MainWindowForm()
    window.show()

    sys.exit(app.exec())


combo.py:

Código:
import sys

from mysql import connector
from PySide6.QtWidgets import QApplication, QDialog, QMainWindow
from views.creacion_window import MainWindow
from database import baseCombo as BC

class MainWindowCombo(QMainWindow, QDialog, MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.agreg_talle_boton.clicked.connect(self.insert_combo_color)
        self.agrega_color_boton.clicked.connect(self.insert_combo_color)

    def insert_combo_color(self):
       
        color = self.crea_color_le.text()
        coloroculto = self.crea_color_le.text()
       
        #self.combo_talle.addItem(talle)
        data = (color, coloroculto)
       
        if BC.insert_color(data):
            print("articulo agregado")
            self.clear_inputs()

   

    def clear_inputs(self):
        self.crea_talle_le.clear()
        self.crea_color_le.clear()
       
       
      



if __name__ == '__main__':
    app=QApplication()

    app.setStyle('Fusion')

    window = MainWindowCombo()
    window.show()

    sys.exit(app.exec())
Responder
#2
Hola. No he probado el código, pero creo que esta función:

Código:
def combo_ventana(self):
    self.ventana = QtWidgets.QMainWindow()
    self.ui=MainWindowCombo()
    self.ui.setupUi(self.ventana)
    self.ventana.show()

Debería ser algo así:

Código:
def combo_ventana(self):
    self.ventana = MainWindowCombo()
    self.ventana.setupUi(self.ventana)
    self.ventana.show()

Puesto que MainWindowCombo ya deriva de QMainWindow, no hay necesidad de crear una tercera ventana.

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
(26-11-2021, 12:42 AM)Francisco escribió: Hola. No he probado el código, pero creo que esta función:

Código:
def combo_ventana(self):
    self.ventana = QtWidgets.QMainWindow()
    self.ui=MainWindowCombo()
    self.ui.setupUi(self.ventana)
    self.ventana.show()

Debería ser algo así:

Código:
def combo_ventana(self):
    self.ventana = MainWindowCombo()
    self.ventana.setupUi(self.ventana)
    self.ventana.show()

Puesto que MainWindowCombo ya deriva de QMainWindow, no hay necesidad de crear una tercera ventana.

Saludos
Hola Francisco gracias por responder, modifique eso que me mencionas, igualmente sigo con el mismo inconveniente, algo me debe faltar hacer seguramente, lo que me llama la atencion es que ni siquiera hay un error,  es como si la ventana secundaria solo es una ventana con widgets sin ninguna funcion.
Responder
#4
Ahora veo que esta línea:

Código:
self.ventana.setupUi(self.ventana)

Tampoco es necesaria, pues ya estás llamado a setupUi() desde el constructor de MainWindowCombo. Por otro lado, esa clase no debería heredar de QMainWindow, que solo debe usarse para la ventana principal. Debería heredar únicamente de QDialog.

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
#5
Thumbs Up 
(27-11-2021, 11:31 PM)Francisco escribió: Ahora veo que esta línea:

Código:
    self.ventana.setupUi(self.ventana)

Tampoco es necesaria, pues ya estás llamado a setupUi() desde el constructor de MainWindowCombo. Por otro lado, esa clase no debería heredar de QMainWindow, que solo debe usarse para la ventana principal. Debería heredar únicamente de QDialog.

Saludos

!!!Exelente!! funciono de 10, ahora voy entendiendo un poco mejor a veces que cuesta entender como funciona  cuando importas modulos desde otros archivos, me pasa cuando importo para llenar una base de datos va bien pero cuando quiero leerla no me reconoce las variables por eso las hago en el archivo principal.

Gracias nuevamente Francisco  por tu ayuda...
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)