Wu_Yi | 2020-05-11 10:51:10 UTC | #1
I got a question on how to reference the appcontext while the window component are itself part of the appcontext attribute. Here is my code snippet setup so far.
#Main Window Component
class MainWindow(QMainWindow):
def __init__(self,ctx):
super().__init__() # inherit the parent class attributes
self.ctx =ctx
#Application Context Class
class AppContext(ApplicationContext):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.window = MainWindow()
# show the main window and
def run(self):
self.window.show()
return self.app.exec_()
#method to get the resource image
def getImg(self):
return self.get_resource('sample.png')
if __name__ == '__main__':
appctxt = AppContext()
appctxt.run()
sys.exit(appctxt.app.exec_())
I guess my question is how could i pass appcontext as a object reference into the MainWindow compnent as reference when MainWindow itself is initialised inside the appcontext?
Thanks for helping out on this dumb question.
Wu_Yi | 2020-05-11 10:51:03 UTC | #2
Actually, I figured that all I need to do is as below to cross reference class.
self.window = MainWindow(self)
Problem Solved.
Packaging Python Applications with PyInstaller by Martin Fitzpatrick — This step-by-step guide walks you through packaging your own Python applications from simple examples to complete installers and signed executables.
martin | 2020-05-15 20:14:05 UTC | #3
Great you worked it out, but another way you can do this is by passing your AppContext to your MainWindow as you create it. In your example code MainWindow accepts a single parameter ctx which is intended for this.
PyQt/PySide 1:1 Coaching with Martin Fitzpatrick — Save yourself time and frustration. Get one on one help with your Python GUI projects. Working together with you I'll identify issues and suggest fixes, from bugs and usability to architecture and maintainability.
[quote="Wu_Yi, post:1, topic:182"]
#Main Window Component
class MainWindow(QMainWindow):
def __init__(self, ctx): # this is receiving the context as ctx
super().__init__() # inherit the parent class attributes
self.ctx =ctx # storing a reference to the context
#Application Context Class
class AppContext(ApplicationContext):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.window = MainWindow(self) # add self here to pass the context object to the MainWindow
[/quote]