使用简单的PyQT UI选择目录路径粉碎

Dan*_*zer 2 python pyqt python-3.x pyqt5

我是Python的新手,尤其是PyQT的新手。我使用PyQT5创建了一个非常简单的GUI。现在,我想对其进行升级,使其包含一些比计算数字运算更真实的东西。

我希望用户选择包含图像的目录。之后,以及其他一些小操作,例如勾选一些复选框,我想在后台运行我的算法,同时要通过progressBar向他/她显示进度。

这是我现在的代码:

import sys
from os.path import expanduser

from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import uic, QtGui

Ui_MainWindow, QtBaseClass = uic.loadUiType("mainGui_3A.ui")


class MyApp(QMainWindow):
    def __init__(self):
        super(MyApp, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.pushButton_Directory.clicked.connect(self.choose_directory)
        self.ui.pushButton_CreateAlbum.clicked.connect(self.create_album)

    def choose_directory(self):
        my_dir = QtGui.QFileDialog.getExistingDirectory(
        self,
        "Open a folder",
        expanduser("~"),
        QtGui.QFileDialog.ShowDirsOnly
    )
        self.ui.lineEdit_Directory.setText(my_dir)

    def create_album(self):
        current_dir = self.ui.lineEdit_Directory.toPlainText()
        check1 = self.ui.checkBox_1.value()
        check2 = self.ui.checkBox_2.value()
        return current_dir, check1, check2

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

我看过:

PYQT-如何打开目录文件夹?

PyQt:QFileDialog.getExistingDirectory使用默认目录,用户独立

如您所见,自以下错误以来,我仍然没有添加最后一位,但我认为我需要研究一下:

在PyQt中使用QThread的正确方法示例?

从我的GUI类PyQt4之外的其他类更改进度栏的值

首先没有错误。我相信ui会被立即加载,但是一旦我单击按钮之一,程序就会停止运行..我怎么了?我需要使用线程来选择目录吗?

未来的任何提示都将受到欢迎!

提前致谢!

Dan*_*zer 5

我不喜欢回答我自己的问题的想法,但我想如果这样做可以为某人节省几个小时的研究,那还不错。

所以在这里我找到了一个解决方案,以及我的代码中可能的错误。

解:

import sys
from os.path import expanduser

from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog
from PyQt5 import uic, QtGui, QtCore

Ui_MainWindow, QtBaseClass = uic.loadUiType("mainGui_3A.ui")


class MyApp(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MyApp, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        logo_src = "appLogo.png"
        self.setWindowIcon(QtGui.QIcon(logo_src))
        self.ui.pushButton_Directory.clicked.connect(self.choose_directory)
        self.ui.pushButton_CreateAlbum.clicked.connect(self.create_album)
        self.ui.pushButton_Directory.setToolTip('Choose directory')
        self.ui.checkBox_Quality.setToolTip('Include image quality assessment upon selection of representative photos')
        self.ui.checkBox_Launch.setToolTip('Display output album when done')

    def choose_directory(self):
        print("Hello1")
        input_dir = QFileDialog.getExistingDirectory(None, 'Select a folder:', expanduser("~"))
        self.ui.lineEdit_Directory.setText(input_dir)




    def create_album(self):
        print("Hello2")
        current_dir = self.ui.lineEdit_Directory.text()
        if current_dir != "":
            quality = self.ui.checkBox_Quality.isChecked()
            launch = self.ui.checkBox_Launch.isChecked()
            print(current_dir)
            print(quality)
            print(launch)
        return 1


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

我通过文本比较发现了可能的错误:

代替

    input_dir = QFileDialog.getExistingDirectory(None, 'Select a folder:', 
        expanduser("~"))
Run Code Online (Sandbox Code Playgroud)