Ich bin absoluter Neuling im Bereich Python und habe mit AI Hilfe 2 einfach Codes erstellt. Jetzt komme ich aber nicht mehr weiter. Ziel ist es die beiden Codes zusammenzulegen.
Funktion des Codes (PyCharm, Windows 11):
"Code 1": Eine Suchmaschine mit GUI, die auf meiner Synology DiskStation in einem festen Verzeichnis PDF Files durchsuchen soll. Dazu sollen die Suchergebnisse in einem Ergebnisfeld aufgelistet werden (File Namen). Mit Doppelklick öffnet sich die PDF im Standard Reader. Das funktioniert soweit auch erstmal ganz gut.
"Code 2": Ebenfalls ein GUI, welches über einen Browse Button die Auswahl einer PDF erlaubt und dann eine Vorschau dieser anzeigt. Das funktioniert ebenfalls erstmal ganz gut.
Nun möchte ich "Code 2" so in "Code 1" integrieren, dass das GUI aus "Code 1" um das Vorschaufenster vom GUI aus "Code 2" erweitert wird. Anstelle der manuellen Auswahl einer PDF über den Browse Button in "Code 2", soll die Vorschau erfolgen wenn eines der Suchergebnisse ausgewählt ist (single-click), während die Funktionalität des Doppel-Klick (öffnen der PDF im Standard Reader) erhalten bleibt. Im Prinzip so wie man es im Windows Explorer vorfindet.
Ich hoffe meine Erläuterung, was ich vorhabe, ist verständlich.
Ich wäre für euren Input super Dankbar. Ich bin mit meinem Wissen wirklich gaaanz am Anfang, daher freue ich mich über Antworten die so geschrieben sind, dass auch "Joe from the last row" sie versteht.

Code 1:
Code 2:import os
import tkinter as tk
from tkinter import filedialog
# Define global variables
username = "Username"
password = "Password"
network_path = r"\\Synology-DS\folder\subfolder"
# Function to map network drive
def map_network_drive():
cmd = f'net use "{network_path}" /user:"{username}" "{password}" /persistent:no'
os.system(cmd)
# Function to search for files that contain multiple conditions in the file name
def search_files(directory, search_text):
conditions = search_text.split()
matches = []
for root, dirs, files in os.walk(directory):
for file in files:
if all(condition.lower() in file.lower() for condition in conditions):
matches.append(os.path.join(root, file))
return matches
# Function to display search results in listbox
def display_results(matches):
results_listbox.delete(0, tk.END)
if len(matches) == 0:
results_listbox.insert(tk.END, "No matching files found")
else:
for match in matches:
results_listbox.insert(tk.END, os.path.basename(match))
# Function to execute search
def execute_search():
map_network_drive()
path = network_path
search_text = search_field.get()
matches = search_files(path, search_text)
display_results(matches)
# Create main window
root = tk.Tk()
root.title("File Search")
# Create search field
search_frame = tk.Frame(root)
search_frame.pack(side=tk.TOP, fill=tk.X, padx=10, pady=10)
search_label = tk.Label(search_frame, text="Search:")
search_label.pack(side=tk.LEFT)
search_field = tk.Entry(search_frame)
search_field.pack(side=tk.LEFT, fill=tk.X, expand=True)
search_field.bind("<Return>", lambda event: execute_search())
search_button = tk.Button(search_frame, text="Search", command=execute_search)
search_button.pack(side=tk.LEFT, padx=10)
# Create results listbox
results_frame = tk.Frame(root)
results_frame.pack(side=tk.TOP, fill=tk.BOTH, expand=True, padx=10, pady=10)
results_label = tk.Label(results_frame, text="Search Results:")
results_label.pack(side=tk.TOP)
results_listbox = tk.Listbox(results_frame, height=20)
results_listbox.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
results_listbox.bind("<Double-Button-1>", lambda event: os.startfile(os.path.join(network_path, results_listbox.get(results_listbox.curselection()))))
# Run main loop
root.mainloop()
Preview Code:
import wx
import fitz # PyMuPDF library
class PDFPreviewPanel(wx.Panel):
def __init__(self, parent):
super().__init__(parent)
self.bitmap = wx.StaticBitmap(self)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.bitmap, 1, wx.EXPAND)
self.SetSizer(sizer)
def load_pdf(self, filepath):
with fitz.open(filepath) as doc:
page = doc.load_page(0)
pix = page.get_pixmap(alpha=False)
image = wx.Image(pix.width, pix.height, pix.samples)
image.SetData(pix.samples)
self.bitmap.SetBitmap(wx.Bitmap(image))
class PDFPreviewFrame(wx.Frame):
def __init__(self):
super().__init__(None, title='PDF Preview')
self.panel = wx.Panel(self)
self.pdf_preview = PDFPreviewPanel(self.panel)
browse_button = wx.Button(self.panel, label='Browse...')
browse_button.Bind(wx.EVT_BUTTON, self.on_browse)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.pdf_preview, 1, wx.EXPAND)
sizer.Add(browse_button, 0, wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER, 10)
self.panel.SetSizer(sizer)
def on_browse(self, event):
with wx.FileDialog(self, "Select a PDF file", wildcard="PDF files (*.pdf)|*.pdf", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:
if fileDialog.ShowModal() == wx.ID_CANCEL:
return
filepath = fileDialog.GetPath()
self.pdf_preview.load_pdf(filepath)
if __name__ == '__main__':
app = wx.App()
frame = PDFPreviewFrame()
frame.Show()
app.MainLoop()