簡體   English   中英

使用pyqt5庫的QFileDialog出現Python錯誤

[英]Python error with QFileDialog using pyqt5 library

我正在嘗試使用python3在pyqt5中創建路徑瀏覽器,但我有一些疑問。 我的代碼是這樣的:

from PyQt5 import QtCore, QtGui, QtWidgets    
class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(800, 600)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
            self.horizontalLayoutWidget.setGeometry(QtCore.QRect(300, 150, 160, 80))
            self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
            self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
            self.horizontalLayout.setObjectName("horizontalLayout")
            self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
            self.label.setObjectName("label")
            self.horizontalLayout.addWidget(self.label)
            self.lineEdit = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
            self.lineEdit.setObjectName("lineEdit")
            self.horizontalLayout.addWidget(self.lineEdit)
            self.toolButton = QtWidgets.QToolButton(self.horizontalLayoutWidget)
            self.toolButton.setObjectName("toolButton")
            self.horizontalLayout.addWidget(self.toolButton)
            MainWindow.setCentralWidget(self.centralwidget)

            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)


            QtCore.QMetaObject.connectSlotsByName(MainWindow)

            # Button action
            self.toolButton.pressed.connect(self.selectDirectory(MainWindow, self.lineEdit))
        def selectDirectory(self, MainWindow, editText):

                editText.setText(str(QtWidgets.QFileDialog.getExistingDirectory(MainWindow, "Select Directory", str(editText.text()))))

        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
            self.label.setText(_translate("MainWindow", "Path"))
            self.toolButton.setText(_translate("MainWindow", "..."))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

這個想法是使用edittext將路徑寫入文件夾,但是作為助手,我想引入一個按鈕來打開文件瀏覽器以選擇目錄。 為此,我嘗試使用QFileDialog而不成功。 我現在的問題是,當我運行我的應用程序時,將顯示QFileDialog,而當我選擇一個文件夾時,應用程序崩潰。 第一件事我不想在不按下按鈕的情況下顯示QFileDialog,第二件事我不明白為什么應用程序因此錯誤而崩潰:

Traceback (most recent call last):
  File "test.py", line 48, in <module>
    ui.setupUi(MainWindow)
  File "test.py", line 31, in setupUi
    self.toolButton.pressed.connect(self.selectDirectory(MainWindow, self.lineEdit))
TypeError: argument 1 has unexpected type 'NoneType'

謝謝你的幫助

pressed的信號希望連接到不需要參數的插槽,因此您不能使用selectDirectory()函數直接連接,必須使用lambda函數進行連接。

你必須改變

self.toolButton.pressed.connect(self.selectDirectory(MainWindow, self.lineEdit))

self.toolButton.pressed.connect(lambda m=MainWindow, l=self.lineEdit: self.selectDirectory(m, l))

暫無
暫無

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

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