Why this script opens file as soon as it is launched? No program is showed.
It is supposed to open file when the button is pressed.
If I remove widget.connect
, then everything is ok. But the butto开发者_运维知识库n does not working.
import sys
import os
from PyQt4 import QtGui, QtCore
# open file with os default program
def openFile(file):
if sys.platform == 'linux2':
subprocess.call(["xdg-open", file])
else:
os.startfile(file)
# pyQt
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
button = QtGui.QPushButton('open', widget)
widget.connect(button, QtCore.SIGNAL('clicked()'), openFile('C:\file.txt'))
widget.show()
sys.exit(app.exec_())
What is wrong with this widget.connect
?
In your connect line openFile('C:\file.txt')
is a call to the function openFile. When you connect a signal to a slot you're supposed to pass a callable, e.g. a function but you're passing the result of openFile.
As you want to hard code the parameter to openFile you need to create a new function which takes no arguments and when called calls openFile('C:\file.txt')
. You can do this using a lambda expression, so your connect line becomes:
widget.connect(button, QtCore.SIGNAL('clicked()'), lambda: openFile('C:\file.txt'))
精彩评论