Dosya okumada aldığım sorun

    def openFile(window):
        print("open file")
        filePatha, _ = QFileDialog.getOpenFileName(window, 'Dosya Seç')
        print(filePath)
        if filePath:  # Dosya seçilip seçilmediğini kontrol ediyoruz
            try:
                with open(filePath, 'r') as file:
                    fileContent = file.read()
                print(fileContent)
            except Exception as e:
                print("Dosya okunamadı:", e)
        else:
            print("Dosya seçilmedi.")

Bu fonksiyonu bir dosya sectiğimde :

Dosya okunamadı: ‘bool’ object does not support the context manager protocol

cıktısını alıyorum, hatanın sebebi nedir.

Hatanın sebebi sizin open fonksiyonunun mode parametresine r değerini yazmanız ve metin tabanlı olmayan bir dosyayı açmaya çalışıyor olmanız.

Eğer open fonksiyonuna çalışırsanız, hatanın nasıl düzeltilebileceğini de anlayabilirsiniz diye tahmin ediyorum.

Lütfen, aşağıdaki linki okuyun. Ondan sonra gerekli değişikliği kendiniz yapmaya çalışın.

.py uzantılı bir dosyayı acmaya calışıyorum…

Şöyle basit bir örnek göstereyim size:

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QPushButton, QVBoxLayout


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.box = QVBoxLayout(self)
        self.setLayout(self.box)
        self.button = QPushButton(self)
        self.button.setText("Open")
        self.button.clicked.connect(self.open)
        self.box.addWidget(self.button)
        
    def open(self):
        filename, _ = QFileDialog.getOpenFileName(self, "Open", ".", "Python Files (*.py)")
        if filename:
            with open(filename) as f:
                print(f)
        
        
        
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

hatamın ne olduğunu hala anlamadım. Benimkinden pek bi farkı yok gibi, bu fonksiyonu benimkine koyup self kısmını değiştirdim yinede olmuyor Process finished with exit code -1073740791 (0xC0000409) cıktısını alıyorum ve hangi dosyayı sectiysem o dosyanın türüne göre bir uygulamada acıyor mesela .txt dosyalarını not defteri ile acıyor.

Kodunuzu paylaşın.

main.py:

from PyQt5.QtWidgets import QApplication
from gui import SimpleCodeGUI
from sys import exit, argv

if __name__ == '__main__':
    app = QApplication(argv)
    ex = SimpleCodeGUI()
    exit(app.exec_())

gui.py:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow, QSplitter
from editorFunctions import *
from menüBarManager import MenuBarManager


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

        self.menuBarManager = MenuBarManager(self)
        self.initUI()

    def initUI(self):
        # Ana pencereyi oluştur
        self.setWindowTitle('Simple Code')
        self.setGeometry(100, 100, 600, 400)



        fileMenu = self.menuBarManager.addMenu('File')
        self.menuBarManager.addAction(fileMenu, 'Open File', lambda: EditorFileFunctions.openFile(self))
       

        
        # Pencereyi göster
        self.show()


menüBarManager.py:

from PyQt5.QtWidgets import QAction


class MenuBarManager:
    def __init__(self, parent):
        self.parent = parent
        self.menubar = parent.menuBar()

    def addMenu(self, title: str):
        menu = self.menubar.addMenu(title)
        return menu

    def addAction(self, menu, title: str, action_func):
        action = QAction(title, self.parent)
        action.triggered.connect(action_func)
        menu.addAction(action)
        return action



editorFunctions.py:

from PyQt5.QtWidgets import QFileDialog

class EditorFileFunctions:
    def newFile(window, tabPanel):
        print("new file")

    def openFile(window):
        filename, _ = QFileDialog.getOpenFileName(window, "Open", ".", "Python Files (*.py)")
        if filename:
            with open(filename) as f:
                print(f.read())


Sorun olmayan kısımları cıkarttığımda böyle kaliyor kod

Bir sorun oluşmadı. Kodlar çalıştı bende.

1 Beğeni

Anlaşılan sıkıntı olmadığını düşümdüğüm yerde bir sıkıntı var…

GitHub - Addemkrt/samp tam kod burda(eksik kısımlara takılmazsanız sevinirim projeyi bitirmedim :slight_smile: )

True/False donduren bir sey ile with kullanilmis.

open degistirilmis olabilir?

Adem Bey, bu satırı neden yazdınız acaba?

65.satırda web sayfası acmak icin.

Bu kısmo kaldırdım yinede aynı hatayı aldım.

Reponuzu indirdim, editorFunctions.py dosyasındaki ilk satırı yorum satırına çevirince bir hata vermedi.

nasıl? ben hala alıyorum aynı hatayı

Bilemiyorum. O kısmı yorum satırına çevirince hata almadım. Acaba dosyada değişiklik yaptıktan sonra dosyayı kaydetmemiş olabilir misiniz?

ah pardon pycharmdaki bir hatadan dolayı dosyayı kaydetmemiş build in kütüphaneninde böyle bir sorun cıkartması ilginc.

Sorun webbrowser.open fonksiyonunda degil, onun with ile kullanilmasinda.