Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python 3(Qt)[Errno 13]权限被拒绝。如何获取文件夹路径?_Python_Python 3.x_Pyqt_Pyqt5_Permission Denied - Fatal编程技术网

python 3(Qt)[Errno 13]权限被拒绝。如何获取文件夹路径?

python 3(Qt)[Errno 13]权限被拒绝。如何获取文件夹路径?,python,python-3.x,pyqt,pyqt5,permission-denied,Python,Python 3.x,Pyqt,Pyqt5,Permission Denied,我正在构建小型桌面应用程序。所有我需要的是得到文件夹路径,并把它在文本编辑小部件。从那里我需要运行一些扫描功能,通过所有文件,是坐在文件夹路径。但我得到的只是一个错误: PermissionError: [Errno 13] Permission denied: 'C:/Users/dava8001/AppData/Local/Programs/Python/Python36-32/test-scan1/images'. 有什么建议吗 这是我的密码: from PyQt5 import QtG

我正在构建小型桌面应用程序。所有我需要的是得到文件夹路径,并把它在文本编辑小部件。从那里我需要运行一些扫描功能,通过所有文件,是坐在文件夹路径。但我得到的只是一个错误:

PermissionError: [Errno 13] Permission denied: 'C:/Users/dava8001/AppData/Local/Programs/Python/Python36-32/test-scan1/images'.
有什么建议吗

这是我的密码:

from PyQt5 import QtGui
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QPushButton, QTextEdit, QLineEdit, QToolTip, QMessageBox, QProgressBar, QWidget
from PyQt5.QtCore import QCoreApplication, QBasicTimer
import sys
import os

class Window(QMainWindow):
def __init__(self):
    super().__init__()

    self.title = "Barcode Scanner"
    self.top = 100
    self.left = 100
    self.width = 680
    self.height = 500

    self.InitWindow()

def InitWindow(self):
    self.button = QPushButton("Choose Folder Path", self)
    self.button.move(100, 150)
    self.button.resize(150, 50)
    self.button.clicked.connect(self.getFolder)

    self.btnScan = QPushButton("Scan", self)
    self.btnScan.move(450, 150)
    self.btnScan.resize(150, 50)
    self.btnScan.clicked.connect(self.scan)

    self.btnClose = QPushButton("Close", self)
    self.btnClose.move(450, 400)
    self.btnClose.resize(150, 50)
    self.btnClose.clicked.connect(self.CloseApp)

    self.textEdit = QTextEdit(self)
    self.textEdit.move(100, 200)
    self.textEdit.resize(500, 30)


    self.pbar = QProgressBar(self)
    self.pbar.setGeometry(100, 350, 532, 25)

    self.setWindowIcon(QtGui.QIcon("barcode.png"))
    self.setWindowTitle(self.title)
    self.setGeometry(self.top,self.left, self.width, self.height)
    self.show()

def scan(self):
    self.completed = 0
    while self.completed < 100:
        self.completed += 0.0001
        self.pbar.setValue(self.completed)

def getFolder(self):
    """ddir = QFileDialog.getExistingDirectory(self, "Open Directory", 
    "C:/Users/dava8001/Desktop/", QFileDialog.ShowDirsOnly | 
    QFileDialog.DontResolveSymlinks)
    ddir = self.textEdit.toPlainText()
    if ddir:
        f = open(ddir, 'r')
        with f:
            data = f.read()
            self.textEdit.toPlainText(data)
    else:
        pass

    self.textEdit(self.getFolder)"""

    name = QFileDialog.getExistingDirectory(self, "Open Directory", "C:/Users/dava8001/Desktop/", QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks)
    file = open(name, 'r')
    self.editor()
    with file:
        text = file.read()
        self.textEdit.setText(text)

def CloseApp(self):
    reply = QMessageBox.question(self, "Close Message", "Are you sure you 
    want to close?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
    if reply == QMessageBox.Yes:
        self.close()

app = QApplication(sys.argv)
window = Window()
sys.exit(app.exec())

您的程序可能如下所示:

import sys
import os
from PyQt5.QtGui     import QIcon
from PyQt5.QtWidgets import (QApplication, QMainWindow, QFileDialog, 
                             QPushButton, QTextEdit, QLineEdit, QToolTip, 
                             QMessageBox, QProgressBar, QWidget,
                             QHBoxLayout, QVBoxLayout)
from PyQt5.QtCore    import QCoreApplication, QBasicTimer, QThread, pyqtSignal


class AThread(QThread):

    # Use the signals to send the information.
    updateSignal = pyqtSignal(list, int) 

    def __init__(self, folder, allFiles):
        super().__init__()
        self.folder  = folder
        self.cons    = 1 if allFiles<100 else allFiles//100+1
        self.indPbar = 1
        self.ind     = 0
        self.files   = []

    def run(self):
        for root, dirs, files in os.walk(self.folder):
            self.updateSignal.emit(["\n{}:".format(root),], self.indPbar)
            for file in files:
                if self.cons == 1:   
                    self.indPbar += 1
                    self.updateSignal.emit([file,], self.indPbar)
                else:
                    self.files.append("{}".format(file))                    
                    self.ind += 1

                if  self.ind >= 100:
                    self.indPbar += 1
                    self.updateSignal.emit(self.files, self.indPbar)
                    self.ind = 0
                    self.cons -= 1
                    self.files = []
                QThread.msleep(1)
            self.updateSignal.emit(self.files, self.indPbar)
            self.files = []            
        self.updateSignal.emit(self.files, 100)                    


class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowIcon(QIcon("E:/_Qt/img/qt-logo.png"))      # "barcode.png"
        self.setWindowTitle("Barcode Scanner")
        self.resize(500, 400)
        self.allFiles = 0

        self.InitWindow()

    def InitWindow(self):
        self.button = QPushButton("Choose Folder Path")
        self.button.clicked.connect(self.getFolder)
        self.lineEdit = QLineEdit("E:/_Qt/Python-Examples/_PyQt5") # "C:/Users/dava8001/Desktop"
        self.lineEdit.setReadOnly(True)

        self.btnScan  = QPushButton("Scan")
        self.btnScan.clicked.connect(
            lambda folder=self.lineEdit.text(): self.scan(self.lineEdit.text()))
        self.btnScan.setEnabled(False)

        self.btnClose = QPushButton("Close")
        self.btnClose.clicked.connect(self.CloseApp)
        self.textEdit = QTextEdit(self)
        self.pbar     = QProgressBar(self)

        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)

        layoutH = QHBoxLayout()
        layoutH.addWidget(self.button)
        layoutH.addStretch(1)
        layoutH.addWidget(self.btnScan)

        layoutV = QVBoxLayout(centralWidget)
        layoutV.addLayout(layoutH)
        layoutV.addWidget(self.lineEdit)
        layoutV.addWidget(self.textEdit)
        layoutV.addWidget(self.pbar)
        layoutV.addWidget(self.btnClose)

    def scan(self, folder):

        self.btnScan.setEnabled(False)
        self.thread = AThread(folder, self.allFiles)
        self.thread.finished.connect(self.closeW)
        self.thread.start()
        self.thread.updateSignal.connect(self.update)

    def update(self, texts, val):
        text = "\n".join(texts)
        self.textEdit.append(text)
        self.pbar.setValue(val)

    def closeW(self):
        self.textEdit.append("--- Directory scan complete! ---")
        self.btnScan.setEnabled(True)

    def getFolder(self):
        options = QFileDialog.DontResolveSymlinks | QFileDialog.ShowDirsOnly 
        folder  = QFileDialog.getExistingDirectory(self, 
                            "Open Folder",
                            self.lineEdit.text(),
                            options=options)
        if folder:
            self.pbar.setValue(0)        
            self.lineEdit.setText(folder) 

            self.textEdit.append("\n{}:".format(folder))
            self.allFiles = 0
            for root, dirs, files in os.walk(folder):
                self.allFiles += len(files)
            self.textEdit.append("    total files: {}".format(self.allFiles))
            self.btnScan.setEnabled(True)
        else:
            self.textEdit.append("Sorry, choose a directory to scan!")
            self.btnScan.setEnabled(False)

    def CloseApp(self):
        reply = QMessageBox.question(self, "Close Message", 
                                     "Are you sure you want to close?", 
                                     QMessageBox.Yes | QMessageBox.No, 
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            self.close()


if __name__ == "__main__": 
    app = QApplication(sys.argv)
    app.setStyle('Fusion') 
    window = Window()
    window.show()
    sys.exit(app.exec())

负责扫描的功能是什么?可能的重复:扫描功能尚未完全设置。我在办公室使用windows 7。我还将文件夹路径缩短为C:/。哦,我的天哪,你帮我省去了数周的挣扎!现在我需要完全理解您的代码。非常感谢你!我所要做的就是添加图像扫描方法,这样我就可以得到带有图像名称的条形码编号。谢谢@AšVaidas如果我的代码对您有所帮助,请不要忘记将我的答案标记为有用。