2
I’m learning Python, version 3.7 with Pyqt5 (Qt Designer)
I’m trying to define the value of a label using modules, in window 1 it calls the function and works, but when I open window 2 and click on the button it triggers the function but passes the self of the current window (window 2) where there is no label, generating the following error:
Traceback (most recent call last):
File "\template\config.py", line 18, in returnMain
fun1(self)
File "\modulos\functions.py", line 7, in fun1
lbl = int(self.ui.lblTest.text())
AttributeError: 'Ui_window2' object has no attribute 'lblTest'
I need it to use the self function of window 1.
I replicated the error in small files, it works until clicking the button of the second window that gives the described error.
Follow the code structure in the directory:
Follow the files.
run.py (used to startar the program)
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
import sys
from template.main import MainScreen
if __name__ == "__main__":
app = QApplication(sys.argv)
main = MainScreen()
main.show()
sys.exit(app.exec_())
Gui/window1.py (main window)
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_window1(object):
def setupUi(self, win1):
win1.setObjectName("win1")
win1.resize(297, 219)
self.centralwidget = QtWidgets.QWidget(win1)
self.centralwidget.setObjectName("centralwidget")
self.btnConfig = QtWidgets.QPushButton(self.centralwidget)
self.btnConfig.setGeometry(QtCore.QRect(110, 150, 75, 23))
self.btnConfig.setObjectName("btnConfig")
self.lblTest = QtWidgets.QLabel(self.centralwidget)
self.lblTest.setGeometry(QtCore.QRect(120, 70, 47, 13))
self.lblTest.setObjectName("lblTest")
win1.setCentralWidget(self.centralwidget)
self.retranslateUi(win1)
QtCore.QMetaObject.connectSlotsByName(win1)
def retranslateUi(self, win1):
_translate = QtCore.QCoreApplication.translate
win1.setWindowTitle(_translate("win1", "Window 1"))
self.btnConfig.setText(_translate("win1", "Open config"))
self.lblTest.setText(_translate("win1", "0"))
Gui/window2.py (settings window)
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_window2(object):
def setupUi(self, win2):
win2.setObjectName("win2")
win2.resize(222, 241)
self.centralwidget = QtWidgets.QWidget(win2)
self.centralwidget.setObjectName("centralwidget")
self.btnReturn = QtWidgets.QPushButton(self.centralwidget)
self.btnReturn.setGeometry(QtCore.QRect(70, 120, 75, 23))
self.btnReturn.setObjectName("btnReturn")
win2.setCentralWidget(self.centralwidget)
self.retranslateUi(win2)
QtCore.QMetaObject.connectSlotsByName(win2)
def retranslateUi(self, win2):
_translate = QtCore.QCoreApplication.translate
win2.setWindowTitle(_translate("win2", "Window 2"))
self.btnReturn.setText(_translate("win2", "Return Main"))
modulos/functions.py (where the functions will be)
from PyQt5.QtWidgets import *
from template import main
def fun1(self):
lbl = int(self.ui.lblTest.text())
lbl = (lbl+1)
self.ui.lblTest.setText(str(lbl))
template/config.py (where I will handle settings)
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from gui.window2 import *
from modulos.functions import fun1
class ConfigScreen(QMainWindow):
def __init__(self,*args,**argsv):
super(ConfigScreen,self).__init__(*args,**argsv)
self.ui = Ui_window2()
self.ui.setupUi(self)
self.ui.btnReturn.clicked.connect(self.returnMain)
def returnMain(self):
fun1(self)
self.close()
template/main.py (main module of the program)
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from gui.window1 import *
from template.config import ConfigScreen
from modulos.functions import fun1
class MainScreen(QMainWindow):
def __init__(self,*args,**argsv):
super(MainScreen,self).__init__(*args,**argsv)
self.ui = Ui_window1()
self.ui.setupUi(self)
self.ui.btnConfig.clicked.connect(self.openConfig)
fun1(self)
def openConfig(self):
self.config = ConfigScreen()
self.config.show()
Remember, what is simple for you can be very difficult for others. I’m 1 week trying to solve and I can’t, I was programming a long time ago and I’m trying/needing to learn something new
Maurice, welcome to our community. I really liked his final sentence and, as my former director would say: "Everything is very easy for those who do nothing." Every beginning or resumption of a study requires a lot of effort and I hope you can achieve your goals there! You’ve worked it out very well and I’m sure someone will help you.
– Mateus