import os
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
def verzeichnis_waehlen():
verzeichnis = [Link]()
if verzeichnis:
verzeichnis_var.set(verzeichnis)
def durchsuchen():
ausgabe_text.delete("1.0", [Link])
wurzelverzeichnis = verzeichnis_var.get()
suchname = name_var.get().lower()
suchdomain = domain_var.get().lower()
suchip = ip_var.get().lower()
for ordnername, unterordner, dateien in [Link](wurzelverzeichnis):
for datei in dateien:
if [Link](".txt"):
dateipfad = [Link](ordnername, datei)
try:
with open(dateipfad, "r", encoding="utf-8", errors="ignore") as
f:
inhalt = [Link]().lower()
if (suchname in inhalt) and (suchdomain in inhalt) and
(suchip in inhalt):
ausgabe_text.insert([Link], f"Treffer in: {dateipfad}\
n", "highlight")
except Exception as e:
ausgabe_text.insert([Link], f"Fehler beim Lesen von
{dateipfad}: {e}\n")
# Fenster erstellen
root = [Link]()
[Link]("DB Searcher")
[Link]("1200x800")
# Hintergrundbild laden
try:
bg_image = [Link]("[Link]")
bg_photo = [Link](bg_image)
except Exception as e:
print(f"Fehler beim Laden des Hintergrundbildes: {e}")
bg_photo = None
# Canvas für Hintergrund
canvas = [Link](root, bg="black", highlightthickness=0)
[Link](fill="both", expand=True)
# Hintergrundbild einfügen (falls vorhanden)
if bg_photo:
bg_id = canvas.create_image(0, 0, image=bg_photo, anchor="nw")
# Hauptcontainer für alle Elemente
main_frame = [Link](canvas, bg='black', bd=0)
canvas.create_window((0, 0), window=main_frame, anchor="nw", tags="main_frame")
# Eingabefelder
verzeichnis_var = [Link]()
name_var = [Link]()
domain_var = [Link]()
ip_var = [Link]()
# Stil für die Widgets
widget_style = {
'bg': 'black',
'fg': 'lime',
'highlightbackground': 'lime',
'highlightcolor': 'lime',
'highlightthickness': 1,
'insertbackground': 'lime',
'font': ("Courier", 10),
'bd': 0
}
# Formular-Frame
form_frame = [Link](main_frame, bg='black', padx=20, pady=20)
form_frame.pack(pady=(50, 20))
def create_field(label_text, variable, row, button=False):
frame = [Link](form_frame, bg='black')
[Link](row=row, column=0, sticky="ew", pady=5)
label = [Link](frame, text=label_text, fg="lime",
bg='black', width=15, anchor="e",
font=("Courier", 10))
[Link](side="left", padx=(0, 10))
entry = [Link](frame, textvariable=variable, **widget_style, width=30)
[Link](side="left", fill="x", expand=True)
if button:
btn = [Link](frame, text="Durchsuchen", command=verzeichnis_waehlen,
bg='black', fg="lime", font=("Courier", 10),
highlightbackground="lime", highlightthickness=1,
activebackground='black', activeforeground="white",
bd=0)
[Link](side="left", padx=(10, 0))
create_field("Verzeichnis:", verzeichnis_var, 0, button=True)
create_field("Name:", name_var, 1)
create_field("Domain:", domain_var, 2)
create_field("IP-Adresse:", ip_var, 3)
# Such-Button
search_btn = [Link](form_frame, text="Suchen", command=durchsuchen,
bg='black', fg="lime", font=("Courier", 12, "bold"),
padx=20, pady=5, bd=0,
activebackground='black', activeforeground="white")
search_btn.grid(row=4, column=0, pady=(20, 0), sticky="ew")
# Ergebnisse-Frame
results_frame = [Link](main_frame, bg='black', height=300)
results_frame.pack(fill="both", expand=True, padx=50, pady=(0, 50))
# Text-Widget
text_container = [Link](results_frame, bg='black')
text_container.pack(fill="both", expand=True)
ausgabe_text = [Link](text_container, bg='black', fg="lime",
insertbackground="lime", wrap="word",
font=("Courier", 10), highlightthickness=0,
bd=0)
ausgabe_text.tag_config("highlight", foreground="lime", background='black')
scroll = [Link](text_container, command=ausgabe_text.yview)
ausgabe_text.config(yscrollcommand=[Link])
ausgabe_text.pack(side="left", fill="both", expand=True)
[Link](side="right", fill="y")
# Funktion für Größenanpassung
def on_resize(event):
# Canvas-Größe
canvas_width = canvas.winfo_width()
canvas_height = canvas.winfo_height()
# Hintergrundbild skalieren
if bg_photo:
resized_bg = bg_image.resize((canvas_width, canvas_height), [Link])
new_bg = [Link](resized_bg)
[Link](bg_id, image=new_bg)
[Link] = new_bg # Referenz halten
# Hauptframe zentrieren
main_frame.update_idletasks()
frame_width = min(800, canvas_width - 100)
frame_height = main_frame.winfo_reqheight()
x = max(0, (canvas_width - frame_width) // 2)
y = max(50, (canvas_height - frame_height) // 4)
[Link]("main_frame", x, y)
# Frame-Größen anpassen
form_frame.config(width=frame_width)
results_frame.config(width=frame_width)
# Initiale Anpassung
[Link]("<Configure>", on_resize)
[Link]()