Problema con PyQt5 al pasar una variable.
Estoy trabajando con una GUI de PyQt5 y encuentro un problema. Quiero compartir el objeto Person
con todo el programa, pero cuando lo hago, el programa se vuelve recursivo. He intentado muchos métodos para compartir el objeto persona con otras funciones, pero siempre el objeto se convierte en falso o en objeto de conexión. ¿Alguien sabe por qué funciona así?
“`python
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog, QApplication, QListWidget, QListWidgetItem, QMainWindow, QVBoxLayout
from PyQt5.uic import loadUi
from lot import DatabaseofLoty
from person import Person
from ticket import Ticket
from classes<em>io import read</em>from<em>csv
from kamerdyner import Kamerydner, DatabaseofKamerdyner
from random import choice
kam1 = Kamerydner(1,"Jake")
kam2 = Kamerydner(2, "Christina")
kam3 = Kamerydner(3,"Robert")
databases = DatabaseofKamerdyner([kam1, kam2 ,kam3])
class Airport(QMainWindow):
def <strong>init</strong>(self):
super(Airport,self).<strong>init</strong>()
loadUi("airrport.ui",self)
def save():
global person
a = self.savefunction
person = a
def gotonewclas(a):
return self.gotonewclass(person)
self.Confirmbutton.clicked.connect(save)
self.Confirmbutton.clicked.connect(gotonewclas)
<pre><code>def savefunction(self):
name = self.name.text()
pesel = self.pesel.text()
birthdate = self.birthdate.text()
person = Person(name, pesel, birthdate)
return person
def gotonewclass(self,person):
print(person)
chooselot = Chooselot()
widget.addWidget(chooselot)
widget.setCurrentIndex(widget.currentIndex()+1)
</code></pre>
def guiMain(args):
global widget
app = QApplication(args)
mainwindow = Airport()
widget=QtWidgets.QStackedWidget()
widget.addWidget(mainwindow)
widget.setFixedWidth(480)
widget.setFixedHeight(620)
widget.show()
return app.exec()
if name == "main":
guiMain(sys.argv)
“`
davy.ai
El problema probablemente se debe al uso de una variable global para almacenar el objeto “person”. Cuando se llama a la función “savefunction”, se establece la variable global “person” en el nuevo objeto “Person” creado. Sin embargo, cuando se llama a la función “gotonewclass”, toma el objeto “person” como argumento en lugar de usar la variable global. Esto crea una nueva instancia del objeto “Person”, que a su vez llama nuevamente a la función “savefunction”, creando una recursión infinita.
Para solucionar este problema, puedes pasar el objeto “person” como argumento a la función “gotonewclass” en lugar de usar una variable global. Puedes modificar la función “savefunction” para que devuelva el objeto “Person” en lugar de establecer una variable global, y luego modificar las llamadas “clicked.connect” para pasar el objeto devuelto a la función “gotonewclass”. Aquí tienes un ejemplo de implementación:
En esta implementación, la función “on_confirm_clicked” está conectada a la señal “clicked” del botón “Confirmbutton”. Cuando se hace clic en el botón, llama a la función “savefunction” para crear un nuevo objeto “Person” y luego lo pasa a la función “gotonewclass”.
Ten en cuenta que dado que ahora el objeto “Person” se pasa como argumento a la función “gotonewclass”, deberás actualizar la llamada a
self.gotonewclass()
en la función “on_confirm_clicked” para incluir el objeto “person” como argumento.