PyQt从一开始就运行插槽

时间:2011-05-18 14:27:56

标签: python pyqt

为什么此脚本在启动后立即打开文件?没有显示任何节目。

按下按钮时应该打开文件。

如果我删除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有什么问题?

1 个答案:

答案 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'))