使用简单的PyQT UI选择目录路径压缩

时间:2017-06-25 20:45:26

标签: python python-3.x pyqt 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_())

我看过:

PYQT - How to open a directory folder?

PyQt: QFileDialog.getExistingDirectory using a default directory, user independant

你可以看到我仍然没有添加自下面的错误以来的最后一位,但我想我需要研究一下:

Example of the right way to use QThread in PyQt?

Change the value of the progress bar from a class other than my GUI class PyQt4

一开始没有错误。 ui目前正在装载我相信但是只要我点击我的一个按钮,程序就会停止运行..我做错了什么?我需要使用线程来选择目录吗?

欢迎任何有关未来的提示!

提前致谢!

1 个答案:

答案 0 :(得分:3)

我不喜欢回答我自己的问题,但我想如果这可以节省几个小时的研究,那就很好了。

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

<强> 解决方案:

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_())

我通过文字比较找到可能的错误:

  • 使用

    my_dir = QtGui.QFileDialog.getExistingDirectory(
        self,
        "Open a folder",
        expanduser("~"),
        QtGui.QFileDialog.ShowDirsOnly
    )
    

而不是

    input_dir = QFileDialog.getExistingDirectory(None, 'Select a folder:', 
        expanduser("~"))