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 archivo.py 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.
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!
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.:
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()