How to pass a value from one class to another where each class is on different file
-
Beside the points of @JonB, please write a minimal complete script that we can take a look at. You only post small snipets from here and there then some error that we can only vaguely guess why they happen.
-
- Did you import the
class1
module into theclass_2
module? - Is your code indeed as you show?
- Does it really say it fails on the
raj = class_1()
statement? - Are you aware, even if you get this working, that
raj = class_1()
will create a new instance ofclass_1
? And that is really what you intend/need for your question, and you're not going to come back and say "but this way it doesn't access the existingclass_2
instance/widget I had"... ?
wrote on 8 Jun 2022, 11:59 last edited by@JonB said in How to pass a value from one class to another where each class is on different file:
- Did you import the
class1
module into theclass_2
module? - Is your code indeed as you show?
- Does it really say it fails on the
raj = class_1()
statement? - Are you aware, even if you get this working, that
raj = class_1()
will create a new instance ofclass_1
? And that is really what you intend/need for your question, and you're not going to come back and say "but this way it doesn't access the existingclass_2
instance/widget I had"... ?
Thank you for your comment! No, my code is very huge. I depict only the needed parts here... Do you have any better idea of how to pass the value from class_1() to class_2()? I tried signals/slots but I didn't achieve something. Any idea of how to pass the value with getters/setters?
- Did you import the
-
You realize to you linked to a blog post describing exactly how to implement a getter and a setter and how to use them ?
-
You realize to you linked to a blog post describing exactly how to implement a getter and a setter and how to use them ?
wrote on 8 Jun 2022, 14:44 last edited by@SGaist said in How to pass a value from one class to another where each class is on different file:
You realize to you linked to a blog post describing exactly how to implement a getter and a setter and how to use them ?
I tried to follow the link but as you see above I face problems with my code...
-
As already written earlier, the fact that you post snipets of parts of your code distributed makes it almost impossible to help you.
As @JonB already suggested: you likely did not import class_1 properly in the file where you define class_2.
-
wrote on 8 Jun 2022, 15:20 last edited by
i do not know if there is a predefined method in PyQt but in python you can get the value from a function and call it in other class
this is a simple prototype may helps youdef idfunc(self): id =self.user_idtext() return id
-
i do not know if there is a predefined method in PyQt but in python you can get the value from a function and call it in other class
this is a simple prototype may helps youdef idfunc(self): id =self.user_idtext() return id
@lanas PyQt is a set of Python bindings for the Qt framework, it does not do special things outside of the Python realm. The same rules apply.
-
As already written earlier, the fact that you post snipets of parts of your code distributed makes it almost impossible to help you.
As @JonB already suggested: you likely did not import class_1 properly in the file where you define class_2.
wrote on 8 Jun 2022, 19:22 last edited by john_hobbyist 6 Aug 2022, 19:23@SGaist said in How to pass a value from one class to another where each class is on different file:
As already written earlier, the fact that you post snipets of parts of your code distributed makes it almost impossible to help you.
As @JonB already suggested: you likely did not import class_1 properly in the file where you define class_2.
Yes, I do! Nothing works! Apart from signals/slots and getters/setters how can I pass the value from class_1 to class_2? class_1 and class_2 are stored in different files...
-
Well, this is the standard way to do it.
The fact that your classes are in two different files just means that you have to use proper imports to be able to use them. Nothing more.
From the looks of it, you essentially need to clean up your code base.
As suggested earlier, you should write a small dummy project that does what you want and then adapt that to your big code base.
-
Well, this is the standard way to do it.
The fact that your classes are in two different files just means that you have to use proper imports to be able to use them. Nothing more.
From the looks of it, you essentially need to clean up your code base.
As suggested earlier, you should write a small dummy project that does what you want and then adapt that to your big code base.
wrote on 8 Jun 2022, 19:36 last edited by@SGaist said in How to pass a value from one class to another where each class is on different file:
Well, this is the standard way to do it.
The fact that your classes are in two different files just means that you have to use proper imports to be able to use them. Nothing more.
From the looks of it, you essentially need to clean up your code base.
As suggested earlier, you should write a small dummy project that does what you want and then adapt that to your big code base.
I tried this: https://www.geeksforgeeks.org/getter-and-setter-in-python/ and this: https://programmer.group/pyqt5-quick-start-pyqt5-signal-slot-mechanism.html that have source code. I will try again
-
wrote on 9 Jun 2022, 14:34 last edited by john_hobbyist 6 Sept 2022, 14:36
@JonB : What's the purpose of these lines:
# in `MainWindow` class, somewhere self.window1 = class_1() self.window2 = class_2()
?
-
@JonB : What's the purpose of these lines:
# in `MainWindow` class, somewhere self.window1 = class_1() self.window2 = class_2()
?
wrote on 9 Jun 2022, 16:15 last edited by@john_hobbyist
In the example,class_1
&class_2
are each some kind of widget/window classes, each derived fromQWidget
.class_1()
&class_2()
each create a new instance (window in this case) of the respective class. I store the references in two member variables ofself
, perhaps yourMainWindow
class. -
wrote on 9 Jun 2022, 18:15 last edited by
I am working on this: https://doc.qt.io/qtforpython/examples/example_widgets__thread_signals.html which is perfect for what I want to achieve because it has int signals and includes 3 classes. I am trying to divide it on 3 files. Each class on a separate file and import the other 2 classes from the files. But I get the following error:
(most likely due to a circular import)
How would you divide it?
-
You are not even posting the error, how can we know ?
-
wrote on 9 Jun 2022, 18:24 last edited by
@SGaist said in How to pass a value from one class to another where each class is on different file:
You are not even posting the error, how can we know ?
from thread_signals_1 import MainForm ImportError: cannot import name 'MainForm' from partially initialized module 'thread_signals_1' (most likely due to a circular import) (/home/someone/Desktop/test_code/PyQt5_signals_slots_test/thread_signals_1.py)
-
Please show the exact code you are currently using. All files.
-
wrote on 9 Jun 2022, 18:53 last edited by
Am I allowed to post code (changed though) from this link: https://doc.qt.io/qtforpython/examples/example_widgets__thread_signals.html here? I see something about copyright down in the above website.
-
Post the code with the adequate copyright notice.
-
wrote on 12 Jun 2022, 13:29 last edited by john_hobbyist 6 Dec 2022, 13:35
I am working on JonB's code... After some modifications, I get this error:
File "main_code.py", line 73, in __init__ self.window1.oneParameterSignal.connect(test.onOneParameterSlot) TypeError: class_1 cannot be converted to PyQt5.QtCore.QObject in this context
I googled it, and I found this solution: https://stackoverflow.com/questions/36522809/pyqt5-connection-doesnt-work-item-cannot-be-converted-to-pyqt5-qtcore-qobject
However I cannot understand what to do..even here it is not clear to me https://doc.qt.io/qtforpython-5/PySide2/QtWidgets/QGraphicsObject.html#more
(source of the modified code: https://programmer.group/pyqt5-quick-start-pyqt5-signal-slot-mechanism.html under the paragraph: 3. Advances in signal slot applications, 1. Custom Signal Slot).
Any idea? :-)
-
I am working on JonB's code... After some modifications, I get this error:
File "main_code.py", line 73, in __init__ self.window1.oneParameterSignal.connect(test.onOneParameterSlot) TypeError: class_1 cannot be converted to PyQt5.QtCore.QObject in this context
I googled it, and I found this solution: https://stackoverflow.com/questions/36522809/pyqt5-connection-doesnt-work-item-cannot-be-converted-to-pyqt5-qtcore-qobject
However I cannot understand what to do..even here it is not clear to me https://doc.qt.io/qtforpython-5/PySide2/QtWidgets/QGraphicsObject.html#more
(source of the modified code: https://programmer.group/pyqt5-quick-start-pyqt5-signal-slot-mechanism.html under the paragraph: 3. Advances in signal slot applications, 1. Custom Signal Slot).
Any idea? :-)
wrote on 12 Jun 2022, 14:44 last edited by JonB 6 Dec 2022, 14:45@john_hobbyist
class_1
does not inherit fromQObject
so cannot emit signals, hence that error message I would say. I said I assumed yourclass_1
was supposed to be a widget, but goodness knows....You really need to grasp some of the basics, rather than just banging in code which does not make sense and seeing what happens. First you need to understand classes and instances, which is a C++ thing. Then for signals & slots have you read through https://doc.qt.io/qt-6/signalsandslots.html and understood it? Then read it again? If you follow what is there it has e.g.
All classes that inherit from QObject or one of its subclasses (e.g., QWidget) can contain signals and slots
30/48