I'm building a GUI in python 2.7 with pyqt4. I wanted to link a button to a script and someone provided me the following code:
from PyQt4 import QtGui
import sys
# --- functions ---
def my_function(event=None):
print 'Button clicked: event:', event
print linetext.text()
# run your code
# --- main ---
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
# add "layout manager"
vbox = QtGui.QVBoxLayout()
window.setLayout(vbox)
# add place for text
linetext = QtGui.QLineEdit(window)
vbox.addWidget(linetext)
# add button
button = QtGui.QPushButton("Run", window)
vbox.addWidget(button)
# add function to button
button.clicked.connect(my_function)
window.show()
sys.exit(app.exec_())
I don't understand why you would pass the event=None
as an argument for my_function
. When I run the script without the event parts it works fine.
It's not needed.
In Qt, events and signals/slots are two separate systems. Generally speaking, events ultimately come from outside of the application (e.g. keyboard presses, mouse moves, etc), whilst signals come from within the application.
A click is a combination of events (mouse-press + mouse-release), which are initially handled internally by Qt. The event handlers then emit the clicked
signal whenever appropriate.
The clicked
signal actually sends its checked-state (i.e. True
or False
), rather than an event object. But that is not really relevant in your script (that is, you don't need to provide an argument for it).