Merge Code 1 & Code 2 mit Modifikation

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Barnabas
User
Beiträge: 1
Registriert: Montag 17. April 2023, 12:55

Hallo zusammen,

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. :wink:

Code 1:
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()
Code 2:
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()
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Als erstes sollte Dir aufgefallen sein, dass Du zwei unterschiedliche GUI-Rahmenwerke benutzt, die zu mischen geht nicht. Arbeite also als erstes mal ein Tutorial zu wx durch, und schreibe Deinen ersten Code um. Wenn Du dann eine konkrete Frage zu einem konkreten Problem hast, kannst Du gerne nochmal fragen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Als vor einigen Jahren die “Ich habe einen Pi gekauft, und jetzt brauche ich von euch Code für meine Dildo-Kabinett-LED-Beleuchtung”-Welle hier reinschwappte, fand ich das ja schon recht anstrengend. Aber so wie’s aussieht wird ChatGPT das nochmal toppen...
Antworten