为什么此脚本在启动后立即打开文件?没有显示任何节目。
按下按钮时应该打开文件。
如果我删除widget.connect
,那么一切正常。但按钮不起作用。
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_())
这widget.connect
有什么问题?
答案 0 :(得分:2)
在您的连接线openFile('C:\file.txt')
中调用openFile函数。当您将信号连接到插槽时,您应该通过可调用的信号,例如一个函数,但你传递的是openFile的结果。
由于您希望将参数硬编码为openFile,因此您需要创建一个不带参数的新函数,并在调用时调用openFile('C:\file.txt')
。您可以使用lambda表达式执行此操作,因此您的连接线将变为:
widget.connect(button, QtCore.SIGNAL('clicked()'), lambda: openFile('C:\file.txt'))