[SOLUCIONADO] "Dos ventanas en solo un archivo"

Iniciado por fortil, Abril 15, 2013, 04:53:04 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Abril 15, 2013, 04:53:04 PM Ultima modificación: Septiembre 07, 2014, 01:15:39 PM por Expermicid
Hola a todos, pues no supe como llamarle a eso pues en este tema de las clases me quedo corto y comienzo a patinar.


Problema:
He realizado dos ventanas en pyqt4, la cual las dos tienen la estructura general de cualquier ventana de pyqt cuando se pasa de .ui a .py
- la idea es que la primera ventana dependiendo de algo llame a la otra ventana pasandole el valor de una variable que utilizará esta segunda ventana, el cual este valor se generó en la primera y no puede volver a ser pedido.
- la idea es que al cerrar la segunda ventana esta mande otra variable a la primera y cierre las dos ventanas.
Nota: en realidad mi problema es que no sé como usar las clases en este caso y como importar y/o utilizar este archivo de la manera import y pasarle el valor de una variable

mi solución había sido utilizar el os.popen("python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta valor_variable") y ya con eso tenía solucionado hasta el momento, pero luego surgieron muchos problemas mas.

ahora mi idea es utilizarlos como import archivo, o meterlos en el mismo archivo y que queden diferentes clases, pero no sé como llamarlos pasandoles un valor en un momento determinado después de ejecutarse el primer programa.


Esto es la estructura general de las ventanas.

Código: python
from PyQt4 import QtCore, QtGui
import sys, os
import MySQLdb as msdb

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s

class Ui_MainWindow(QtGui.QMainWindow):
def __init__(self,parent=None):
QtGui.QMainWindow.__init__(self)#,None,QtCore.Qt.WindowStaysOnTopHint)
self.setupUi(self)

def setupUi(self, MainWindow):
####............................

def retranslateUi(self, MainWindow):
#####....................

####codigo del programa ...................

def main():
# Nuevamente, esto es estandar, sera igual en cada
# aplicacion que escribas
app = QtGui.QApplication(sys.argv)
#~ if len(sys.argv) == 2:           //estas son para las que reciben el parametro os.popen
#~ codigo = int(sys.argv[1])
window=Ui_MainWindow()
window.show()
# Es exec_ porque exec es una palabra reservada en Python
sys.exit(app.exec_())

main()



así son en general las ventanas, gracias

Hola brother,

Nunca he trabajado con más de una ventana en QT así que si puedes colocar todo el código o la parte donde llamas a la segunda ventana te podría ayuda un poco mejor.


Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

En realidad es sencillo. Si creas un archivo por cada ventana (cosa que recomiendo), lo que tenes que hacer es importar la segunda ventana e instanciarla, pasandole como parametro la variable que te interesa.
Ej.:
Código: python

import sys
from PyQt4 import QtCore, QtGui
from Ui_VentanaDos import Ui_VentanaDos

class VentanaUno(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        miVariable = 'Esta variable sera utilizada por Ventana Dos'

        self.miVentanaDos= Ui_MainWindow()
        self.miVentanaDos.initUi(miVariable)

        self.initUi()

    def initUi(self):
        ...

def main():
    app = QtGui.QApplication(sys.argv)
    miVentanaUno = VentanaUno()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()


Es un ejemplo simple, en el que la segunda ventana se crea automaticamente, pero la idea es mostrar como pasar la variable.

Esta es una buena alternativa, aunque mejor es que pases como parametro 'self' en vez de la variable: en este caso solo necesitas la variable, pero en algun otro programa tal vez precises modificar varios atributos u obtener cierta informacion de la ventana principal y esta es una forma comoda de hacerlo.

Espero que sea esto lo que buscabas. De lo contrario, subi los codigos y vemos mejor el caso.

Saludos!
WhiZ


Según mi experiencia en PyQT4, solo debes hacer una instancia a la otra clase... Luego solo utilizar instancia.function()
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta