no such file or directory File os python

Рейтинг: 0Ответов: 1Опубликовано: 03.02.2023

Выдает ошибку no such file or directory

File "c:/Users//AppData/Local/Programs/Algoritmika/vscode/data/extensions/algoritmika.algopython-20220718.163731.0/data/student/1276433/143002/main.py", line 97, in showChosenImage
    workimage.loadImage(workdir,filename)
  File "c:/Users//AppData/Local/Programs/Algoritmika/vscode/data/extensions/algoritmika.algopython-20220718.163731.0/data/student/1276433/143002/main.py", line 82, in loadImage
    self.image = Image.open(image_path)
  File "C:\Users\\AppData\Local\Programs\Algoritmika\algovenv\lib\site-packages\PIL\Image.py", line 2878, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'ball.png'

Код:

from PyQt5.QtWidgets import QApplication 
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import os 
from PIL import Image

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.cur_dir = ''
        self.resize(1000, 700)
        self.setWindowTitle('Easy Editor')
        global ql
        ql = QLabel('Картинка', self)

        self.left = QPushButton('Лево', self)
        self.right = QPushButton('Право', self)
        self.zerkalo = QPushButton('Зеркало', self)
        self.rezkost = QPushButton('Резкость', self)
        self.ch_b = QPushButton('Ч/б', self)
        self.papka = QPushButton('Папка', self)

        global listwidget
        listwidget = QListWidget(self)


        listwidget.setGeometry(50, 80, 150, 600)

        ql.setGeometry(250, 250, 100, 50)

        self.papka.setGeometry(50, 30, 150, 30)
        self.left.setGeometry(250, 600, 100, 30)
        self.right.setGeometry(400, 600, 100, 30)
        self.zerkalo.setGeometry(550, 600, 100, 30)
        self.rezkost.setGeometry(700, 600, 100, 30)
        self.ch_b.setGeometry(850, 600, 100, 30)
        self.papka.clicked.connect(self.showFilenameList)
        listwidget.currentRowChanged.connect(showChosenImage)

        global workdir
        workdir = ''

    def showFilenameList(self):
        workdir = QFileDialog.getExistingDirectory()
        extensions1 = ['.jpg','.jpeg','.png','.gif','.bmp']
        filenames = self.filter(os.listdir(workdir),extensions1)
        listwidget.clear()
        for filename in filenames:
            listwidget.addItem(filename)
    def filter(self, files, extensions1):
        result = []
        for filename in files:
            for ext in extensions1:
                if filename.endswith(ext):
                    result.append(filename)
        return result
class ImageProcessor():
    def __init__(self):
        self.image = None
        self.dir = None
        self.filename = None
        self.save_dir = 'Modified/'

    def do_bw(self):
        self.image = self.image.convert('L')
        self.saveImage()
        image_path = os.path.join(self.dir,self.save_dir,self.filename)
        self.showImage(image_path)
    
    def saveImage(self):
        path = os.path.join(self.dir,self.save_dir)
        if not(os.path.exists(path) or os.path.isdir(path)):
            os.mkdir(path)
        image_path = os.path.join(path,self.filename)
        self.image.save(image_path)

    def loadImage(self, dir, filename):
        self.dir = dir
        self.filename = filename
        image_path = os.path.join(dir,filename)
        self.image = Image.open(image_path)

    def showImage(self,path):
        ql.hide()
        pixmapimage =QPixmap(path)
        w,h = ql.age.width(),ql.height()
        pixmapimage = pixmapimage.scaled(w,h,Qt.KeepAspectRatio)
        ql.setPixmap(pixmapimage)
        ql.show()

workimage = ImageProcessor()

def showChosenImage():
    if listwidget.currentRow() >= 0:
        filename = listwidget.currentItem().text()
        workimage.loadImage(workdir,filename)
        image_path = os.path.join(workimage.dir,workimage.filename)
        workimage.showImage(image_path)



if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    ex = MainWindow()
    ex.show()
    sys.exit(app.exec_())

Ответы

▲ 0Принят

Терялась переменная глобальная workdir в функции её определяющей

def showFilenameList(self):
        global workdir

так же ещё одна ошибка

w,h = ql.width(),ql.height()

так же исспользовать функцию dir как имя переменной не комильфо