Python Pyqt4:通过文件浏览小部件编辑QLineEdit文本并将其作为参数发送

Python Pyqt4:通过文件浏览小部件编辑QLineEdit文本并将其作为参数发送,python,pyqt4,partial,qlineedit,Python,Pyqt4,Partial,Qlineedit,我正在尝试创建一个应用程序,它应该允许选择一个目录,并在按下按钮后将所选路径发送到应用程序类之外的另一个函数。还有一个预定义的目录设置为默认路径,并显示在QLineEdit小部件中。这就是我尝试过的: import os import sys from PyQt4 import QtGui from PyQt4 import QtCore from functools import partial class App (QtGui.QMainWindow): def __init__

我正在尝试创建一个应用程序,它应该允许选择一个目录,并在按下按钮后将所选路径发送到应用程序类之外的另一个函数。还有一个预定义的目录设置为默认路径,并显示在QLineEdit小部件中。这就是我尝试过的:

import os
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from functools import partial

class App (QtGui.QMainWindow):

    def __init__(self):
        super(App, self).__init__()
        self.initUI()

    def initUI(self):

        default_path = os.path.dirname(os.path.abspath(__file__))

        def selectDir():
            labelSavePath.setText(QtGui.QFileDialog.getExistingDirectory(self,
                                                         'Select Dir:'))

        self.setFixedSize(450, 150)
        self.setWindowTitle('App')

        labelSavePath = QtGui.QLineEdit(default_path, self)
        labelSavePath.setGeometry(15, 72, 340, 20)
        labelSavePath.setAlignment(QtCore.Qt.AlignLeft)
        labelSavePath.setReadOnly(True)

        btnBrowse = QtGui.QPushButton('Browse', self)
        btnBrowse.setGeometry(365, 67, 80, 30)

        btnBrowse.clicked.connect(selectDir)

        btnStart = QtGui.QPushButton('Start', self)
        btnStart.move(345, 115)
        btnStart.clicked.connect(partial(startRun,
                                 str(labelSavePath.text())))

        self.show()

def startRun(log_path):
    print(log_path) #and do smth useful

if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)
    w = App()
    sys.exit(app.exec_())
但是,无论用户是否更改日志路径,日志路径始终等于默认路径。我已经寻找了几个小时的答案,但仍然没有找到错误,因为我是PyQt新手


我应该如何正确编辑/传递labelSavedPath小部件中的文本,注意可能的更改?

您似乎误解了它的作用。它允许你调用一个函数,它的一些参数预先填充了固定值——这正是你不想要的。改用
lambda

    btnStart.clicked.connect(lambda: startRun(labelSavePath.text()))

注意:如果您使用的是Python3,那么就没有必要使用
str()

来包装所有内容,我确实误解了部分目的。非常感谢,它与lambda配合使用非常好。我使用Python2.7,必须使用str()。@Atsvetk。好的,但您仍然不必使用
str()
。请参阅:在PyQt文档中。