A PyQt button event can be connected in the normal way to a function so that the function receives the default signal arguments (in this case the button checked state):
def connections(self):
my_button.clicked.connect(self.on_button)
def on_button(self, checked):
print checked # prints "True"
Or, the default signal arguments can be overridden using lambda
:
def connections(self):
my_button.clicked.connect(lambda: self.on_button('hi'))
def on_button(self, message):
print message # prints "hi"
Is there a nice way to keep both signal arguments so it can be directly received by a function like below?
def on_button(self, checked, message):
print checked, message # prints "True, hi"
Your lambda
could take an argument:
def connections(self):
my_button.clicked.connect(lambda checked: self.on_button(checked, 'hi'))
def on_button(self, checked, message):
print checked, message # prints "True, hi"
Or you could use functools.partial
:
# imports the functools module
import functools
def connections(self):
my_button.clicked.connect(functools.partial(self.on_button, 'hi'))
def on_button(self, message, checked):
print checked, message # prints "True, hi"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With