我是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目前正在装载我相信但是只要我点击我的一个按钮,程序就会停止运行..我做错了什么?我需要使用线程来选择目录吗?
欢迎任何有关未来的提示!
提前致谢!
答案 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("~"))