PyQt работает слот с самого начала - PullRequest
0 голосов
/ 18 мая 2011

Почему этот скрипт открывает файл сразу после его запуска?Ни одна программа не показана.

Предполагается открыть файл при нажатии кнопки.

Если удалить 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 Ответ

2 голосов
/ 18 мая 2011

В вашей соединительной линии openFile('C:\file.txt') - это вызов функции openFile.Когда вы подключаете сигнал к слоту, вы должны передавать вызываемую функцию, например функцию, но вы передаете результат openFile.

Поскольку вы хотите жестко закодировать параметр в openFile, вам нужно создатьновая функция, которая не принимает аргументов и при вызове вызывает openFile('C:\file.txt').Вы можете сделать это, используя лямбда-выражение, поэтому ваша строка соединения становится:

 widget.connect(button, QtCore.SIGNAL('clicked()'), lambda: openFile('C:\file.txt'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...