簡體   English   中英

Pyqt4:通過文件瀏覽小部件編輯QLineEdit文本並將其作為參數發送

[英]Pyqt4: Editing QLineEdit text via file browsing widget and sending it as a parameter

我正在嘗試創建一個應允許選擇目錄的應用,並在按下按鈕后將所選路徑發送到App類之外的另一個函數。 此外,還有一個預定義目錄設置為默認路徑,並顯示在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_())

但是,無論用戶是否更改了log_path,它始終等於default_path 由於我是PyQt的新手,所以我已經在尋找答案的幾個小時了,但仍然沒有找到該錯誤。

考慮可能的更改,如何正確編輯/傳遞labelSavedPath小部件中的文本?

您似乎誤解了部分功能。 它允許您調用帶有某些參數的函數,這些參數的參數預先填充有固定值-這正是您所不想要的。 改用lambda

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

注意:如果您使用的是Python 3,則無需使用str()包裝所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM