Qt anlamadığım string hatası

import sys
import json
from PyQt5.QtCore import QUrl, Qt, QFile
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QLineEdit, QPushButton, QTabWidget, QShortcut, QMessageBox
from PyQt5.QtWebEngineWidgets import QWebEngineView


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

        # Sekme ayarları
        self.tab_widget = QTabWidget()
        self.setCentralWidget(self.tab_widget)

        # İlk sekme
        self.add_new_tab()

        # Geri gitme butonunu ekleyin
        back_button = QPushButton("<")
        back_button.clicked.connect(self.current_view().back)

        # İleri gitme butonunu ekleyin
        forward_button = QPushButton(">")
        forward_button.clicked.connect(self.current_view().forward)

        # Mevcut URL'i gösteren bir QLineEdit ekleyin
        url_bar = QLineEdit()
        url_bar.setText("http://www.google.com")
        url_bar.returnPressed.connect(lambda: self.current_view().setUrl(QUrl(url_bar.text())))
        self.current_view().urlChanged.connect(lambda url: url_bar.setText(url.toString()))

        # Arama butonunu ekleyin
        search_button = QPushButton("Ara")
        search_button.clicked.connect(lambda: self.current_view().load(QUrl("https://www.google.com/search?q=" + url_bar.text())))

        # Sekme ekleme butonunu ekleyin
        add_tab_button = QPushButton("+")
        add_tab_button.clicked.connect(self.add_new_tab)

        # Sekme kapatma butonunu ekleyin
        close_tab_button = QPushButton("X")
        close_tab_button.clicked.connect(self.close_current_tab)

        # Araç çubuğu oluştur
        toolbar = QToolBar()
        self.addToolBar(toolbar)
        toolbar.addWidget(back_button)
        toolbar.addWidget(forward_button)
        toolbar.addWidget(url_bar)
        toolbar.addWidget(search_button)
        toolbar.addWidget(add_tab_button)
        toolbar.addWidget(close_tab_button)

        # QLineEdit için Enter tuşu kısayolu tanımla
        shortcut = QShortcut(Qt.Key_Return, self)
        shortcut.activated.connect(lambda: self.current_view().load(QUrl("https://www.google.com/search?q=" + url_bar.text())))

        # Yer imleri menüsünü oluştur
        bookmarks_menu = self.menuBar().addMenu("Yer İmleri")

        # Yer imleri dosyasını aç
        try:
            with open("bookmarks.json") as f:
                bookmarks = json.load(f)
        except FileNotFoundError:
            # Yer imleri dosyası bulunamadıysa yeni bir tane oluştur
            bookmarks = []

        # Yer imleri menüsüne yer imleri ekle
        for bookmark in bookmarks:
            action = bookmarks_menu.addAction(bookmark["title"])
            url = str(bookmark["url"])
            action.triggered.connect(lambda checked, url=url: self.current_view().load(QUrl(url)))

        # Yeni yer imi ekleyen düğmeyi ekle
        add_bookmark_button = QPushButton("+")
        add_bookmark_button.clicked.connect(lambda: self.add_bookmark(bookmarks_menu, bookmarks))
        toolbar.addWidget(add_bookmark_button)

    def current_view(self):
        return self.tab_widget.currentWidget()

    def add_new_tab(self):
        view = QWebEngineView()
        view.load(QUrl("http://www.google.com"))
        self.tab_widget.addTab(view, "Yeni Sekme")

    def close_current_tab(self):
        if self.tab_widget.count() > 1:
            widget_index = self.tab_widget.currentIndex()
            self.tab_widget.removeTab(widget_index)
        else:
            self.close()


# Uygulama başlat
app = QApplication(sys.argv)
window = MainWindow()
window.setWindowTitle("Obsec webview")
window.show()
sys.exit(app.exec_())

Bu tarz bir yazılımda şu hatayı verdi:

Traceback (most recent call last):
  File "D:\yazılım\obsec\webcontrol\qqt.py", line 99, in <module>
    window = MainWindow()
  File "D:\yazılım\obsec\webcontrol\qqt.py", line 72, in __init__
    action = bookmarks_menu.addAction(bookmark["title"])
TypeError: string indices must be integers, not 'str'

str() kullanarak pek çok yol denedim ancak çalışmadı json dosyası şu şekilde:

{
  "Google": "https://www.google.com/",
  "Facebook": "https://www.facebook.com/",
  "Twitter": "https://twitter.com/",
  "YouTube": "https://www.youtube.com/"
}

hatanın nedenini anlayamadım yardım edebilecek varsa ederse iyi olur

json ile sadece deneme amaçlı bir program kodladım fazla aşinalığım yok, kodlarıma baktım json dosyasını okuduktan sonra o veriler bir sözlük şeklinde geliyor. işlemleri sözlük yapısıyla değerlendirin. key value items

Birşey anladığımı söyleyemem aslında json dosyasının prensibi bu diye düşünüp kodlamıştım sözlük yapısı.

bookmark string (str) imis. "bookmark"["str"] olmaz diyor.

Bookmark str ise neden olmaz desin ki integer bi değer göremiyorum.

şu bookmarks ı bir printlermisin. ne ile karşılaşacağız.

Cevabınızdan doğru çıkarım yaptı isem, o printlenebilecek bir şey değil aslında bir döngü ve işlevi örn:30 bookmark var 1. den başlayıp hepsini yer imleri yerine ekliyor.

bookmarks ı printlermisin. json dosyasından yükleme yaptınız, veri var ise yazar, yok ise boş liste oluşturmussunuz onu döner, aslında boş sözlük oluşturmanız lazım.

Gelen veri türü dictionary mi, liste olduğundan hata veriyor olma ihtimali var.

Hatayı gördüm gibi. Dosya bulunamadığından bookmarks liste oluyor ve liste olduğu için key araması yapılamıyor.

Biraz dikkatli bakış açısı ve araştırmadan sonra şunu farkettim:
json şöyle olmalı:

[    {        "title": "Google",        "url": "https://www.google.com"    },    {        "title": "Python",        "url": "https://www.python.org"    }]

ama sonra da bookmarks a link eklemek için olan buonu çalışmadığını farkettim ve bunu dikkatli bakışaçısı ile çözemedim.

1 Beğeni
bookmark = "bir string"
a = bookmark["title"]

ne olmali o halde?

integer’in konumuzla bir alakasi yok, hata mesajina takilmayin. Hata:

bookmark string imis. String’leri string ile indeksleyemeyiz.