MedetAk
kodun tamamı işini görür umarım
import sys
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
from PyQt5.QtWidgets import (
QApplication, QWidget, QVBoxLayout, QLineEdit, QTextEdit, QPushButton, QComboBox, QListWidget, QHBoxLayout, QMessageBox
)
from PyQt5.QtCore import QThread, pyqtSignal
class SozlukArama(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.gecmis = []
self.language_map = {
"Türkçe": "türkçe",
"İngilizce": "ingilizce",
"Almanca": "almanca",
"Fransızca": "fransızca"
}
def initUI(self):
# Layout ve bileşenler
main_layout = QVBoxLayout()
# Dil seçimi
lang_layout = QHBoxLayout()
self.lang_box = QComboBox(self)
self.lang_box.addItems(["Türkçe", "İngilizce", "Almanca", "Fransızca"])
lang_layout.addWidget(self.lang_box)
# Kelime giriş
self.edit = QLineEdit(self)
self.edit.setPlaceholderText("Aramak istediğiniz kelimeyi giriniz")
lang_layout.addWidget(self.edit)
main_layout.addLayout(lang_layout)
# Butonlar
button_layout = QHBoxLayout()
self.button_search = QPushButton("Ara", self)
self.button_search.clicked.connect(self.kelime_ara)
button_layout.addWidget(self.button_search)
self.button_save = QPushButton("Sonuçları Kaydet", self)
self.button_save.clicked.connect(self.sonuc_kaydet)
self.button_save.setEnabled(False)
button_layout.addWidget(self.button_save)
main_layout.addLayout(button_layout)
# Arama geçmişi
self.list_gecmis = QListWidget(self)
self.list_gecmis.itemClicked.connect(self.gecmis_arama)
main_layout.addWidget(self.list_gecmis)
# Sonuç görüntüleme
self.memo = QTextEdit(self)
self.memo.setReadOnly(True)
main_layout.addWidget(self.memo)
self.setLayout(main_layout)
self.setWindowTitle('Çok Dilli Sözlük Arama')
self.setGeometry(300, 300, 500, 400)
def kelime_ara(self):
kelime = self.edit.text().strip()
if kelime:
self.memo.setText("Aranıyor...")
dil = self.lang_box.currentText()
dil = self.language_map.get(dil, "türkçe") # Haritadan eşleştir
self.thread = AramaThread(kelime, dil)
self.thread.sonuc_bulundu.connect(self.sonuc_goster)
self.thread.start()
if kelime not in self.gecmis:
self.gecmis.append(kelime)
self.list_gecmis.addItem(kelime)
else:
self.memo.setText("Lütfen bir kelime giriniz.")
def sonuc_goster(self, sonuc):
self.memo.setText(sonuc)
if "Sonuç bulunamadı" not in sonuc:
self.button_save.setEnabled(True)
def gecmis_arama(self, item):
self.edit.setText(item.text())
self.kelime_ara()
def sonuc_kaydet(self):
try:
with open("sonuc.txt", "w", encoding="utf-8") as file:
file.write(self.memo.toPlainText())
QMessageBox.information(self, "Başarılı", "Sonuçlar 'sonuc.txt' dosyasına kaydedildi.")
except Exception as e:
QMessageBox.critical(self, "Hata", f"Sonuçlar kaydedilirken bir hata oluştu: {e}")
class AramaThread(QThread):
sonuc_bulundu = pyqtSignal(str)
def __init__(self, kelime, dil):
super().__init__()
self.kelime = kelime
self.dil = dil
def run(self):
base_url = {
"türkçe": "https://sozluk.gov.tr/gts",
"ingilizce": "https://api.dictionaryapi.dev/api/v2/entries/en",
"almanca": "https://api.dictionaryapi.dev/api/v2/entries/de",
"fransızca": "https://api.dictionaryapi.dev/api/v2/entries/fr"
}
if self.dil == "türkçe":
url = f"{base_url[self.dil]}?ara={self.kelime}"
self.fetch_tdk_results(url)
else:
url = f"{base_url[self.dil]}/{self.kelime}"
self.fetch_generic_results(url)
def fetch_tdk_results(self, url):
headers = {'User-Agent': 'Mozilla/5.0'}
try:
response = requests.get(url, headers=headers, timeout=10)
if response.status_code == 200:
data = response.json()
anlamlar_listesi = [
anlam.get("anlam", "") for item in data for anlam in item.get("anlamlarListe", [])
]
self.sonuc_bulundu.emit("\n\n".join(anlamlar_listesi) if anlamlar_listesi else "Sonuç bulunamadı.")
else:
self.sonuc_bulundu.emit(f"Hata: {response.status_code}")
except Exception as e:
self.sonuc_bulundu.emit(f"Bağlantı hatası: {e}")
def fetch_generic_results(self, url):
headers = {'User-Agent': 'Mozilla/5.0'}
try:
response = requests.get(url, headers=headers, timeout=10)
if response.status_code == 200:
data = response.json()
anlamlar_listesi = self.parse_data(data)
self.sonuc_bulundu.emit("\n\n".join(anlamlar_listesi) if anlamlar_listesi else "Sonuç bulunamadı.")
elif response.status_code == 404:
self.sonuc_bulundu.emit("Kelime bulunamadı.")
else:
self.sonuc_bulundu.emit(f"Hata: {response.status_code}")
except Exception as e:
self.sonuc_bulundu.emit(f"Bağlantı hatası: {e}")
def parse_data(self, data):
anlamlar_listesi = []
if isinstance(data, list):
for idx, item in enumerate(data):
meanings = item.get("meanings", [])
for meaning in meanings:
definitions = meaning.get("definitions", [])
for definition in definitions:
anlamlar_listesi.append(definition.get("definition", "Anlam bulunamadı."))
return anlamlar_listesi
if __name__ == '__main__':
app = QApplication(sys.argv)
sozluk = SozlukArama()
sozluk.show()
sys.exit(app.exec_())