bharathinmail5419 | 2020-07-19 10:31:58 UTC | #1
Can you explain more how
# Add the callback to our kwargs
self.kwargs['**progress_callback**'] = self.signals.progress
had binded to the below function
def execute_this_fn(self, progress_callback):
for n in range(0, 5):
time.sleep(1)
progress_callback.emit(n*100/4)
martin | 2020-07-19 10:39:49 UTC | #2
Hey @bharathinmail5419 welcomet to the forum!
This is making use of Python keyword unpacking. This allows you to pass keyword parameters to functions using a dictionary of key=value pairs.
When we call the execute_this_fn
we call it with the following ...
Create GUI Applications with Python & Qt5 by Martin Fitzpatrick — (PyQt5 Edition) The hands-on guide to making apps with Python — Over 15,000 copies sold!
execute_this_fn(**self.kwargs)
This unpacks the key=value pairs in the self.kwargs
dictionary, as keywords for the function. So for example, if we had the following dictionary
my_dict = {
'something': 3,
'another': 6,
}
and then called a function as follows...
my_function(**my_dict)
this would be the equivalent of ...
my_function(something=3, another=6)
So, going back to the original example. We have a dictionary called kwargs
which holds keyword arguments. We add another entry to that dictionary called 'progress_callback'
which holds the function we're going to call. That could be anything, but for example say we stored the print
function --
Purchasing Power Parity
Developers in [[ country ]] get [[ discount.discount_pc ]]% OFF on all books & courses with code [[ discount.coupon_code ]]kwargs = {}
kwargs['progress_callback'] = print # Store the print function in this dictionary
If we then called our function with...
execute_this_fn(**kwargs)
That would be the equivalent of calling
execute_this_fn(progress_callback=print)
The value stored in the dictionary under progress_callback
is passed as an argument with that keyword to the function.
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.