Seite 1 von 1
Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 16:07
von Merkator
Mein Code:
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
import time
from subprocess import call
import security
# Fenster erstellen
root = tk.Tk()
root.geometry("1200x700")
# Titel des Fensters
root.configure(background='darkblue')
root.title("Application")
# Mithilfe von CustomTKinter ein Label erstellen
clock_label = ttk.Label(root, font=("Arial", 20, 'bold'), foreground="white", background="darkblue", borderwidth=3, relief="ridge")
clock_label.pack()
clock_label.place(x=950, y=35)
# Funktion um die Uhrzeit zu aktualisieren
def tick():
time2 = time.strftime("%H:%M:%S")
clock_label.config(text=time2)
clock_label.after(200, tick)
tick()
# Datum anzeigen
date_label = ttk.Label(root, font=("Arial", 20, 'bold'), foreground="white", background="darkblue", borderwidth=3, relief="ridge")
date_label.pack()
date_label.place(x=950, y=0)
def show_date():
date = time.strftime("%d/%m/%Y")
date_label.config(text=date)
date_label.after(200, show_date)
show_date()
# Text oben in der Mitte
txt_label = ttk.Label(root, font=("Arial", 20, 'bold'), foreground="white", background="darkblue", borderwidth=3, relief="ridge")
txt_label.pack()
txt_label.place(x=100, y=35)
txt_label.config(text="Application")
# Bild definieren
image = tk.PhotoImage(file='schloss.png')
# Programm definieren, das gestartet werden soll
programm = 'security.py'
# Funktion definieren, die beim Klicken auf das Bild aufgerufen wird
def startProgramm(event):
call(programm)
# Event an das Bild binden
label = tk.Label(root, image=image)
label.bind("<Button-1>", startProgramm)
label.pack()
# Fenster schließen
root.mainloop()
Meine Probleme:
1. Das Bild schloss.png soll an 200x100 verschoben werden
2. Das Programm security.py wird anscheinend nicht erkannt, obwohl es im selben Ordner ist
Über eine schnelle Antwort würde ich mich freuen
Re: Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 16:17
von Merkator
Achso und
3. Das Bild schloss.png soll verkleinert werden
Re: Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 16:29
von Sirius3
Man gibt keine Fenstergröße fest vor und benutzt kein `place`, vor allem nicht, wenn man vorher schon `pack` aufgerufen hat.
Globale Variablen benutzt man nicht, alles was ein Programm braucht, wird über seine Argumente übergeben.
`subprocess.call` benutzt man nicht mehr, statt dessen subprocess.run. Das Argument muß eine Liste sein. Langlaufende Skripte darf es bei GUIs nicht geben. Das security.py muß also möglichst sofort wieder beendet sein.
Wenn man ein Label hat, das sich wie ein Button verhalten soll, dann benutzt man gleich einen Button.
Der Kommentar "Fenster schließen" ist falsch.
Wenn man etwas relativ zur Python-Datei referenzieren will, benutzt man __file__.
Es ist komisch, dass das Modul "security" importiert wird, aber auch gleichzeitig als Skript aufgerufen wird? Was macht das Modul bzw. Skript?
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
import datetime
import subprocess
from pathlib import Path
BASEPATH = Path(__file__).parent
# Funktion um die Uhrzeit zu aktualisieren
def update_datetime(clock_label, date_label):
now = datetime.datetime.now()
clock_label['text'] = f"{now:%H:%M:%S}"
date_label['text'] = f"{now:%d/%m/%Y}"
clock_label.after(200, update_datetime, clock_label, date_label)
def start_programm():
subprocess.run([BASEPATH / "security.py"])
def main():
root = tk.Tk()
root.title("Application")
root.configure(background='darkblue')
clock_label = ttk.Label(root, font=("Arial", 20, 'bold'), foreground="white", background="darkblue", borderwidth=3, relief="ridge")
clock_label.pack()
date_label = ttk.Label(root, font=("Arial", 20, 'bold'), foreground="white", background="darkblue", borderwidth=3, relief="ridge")
date_label.pack()
update_datetime(clock_label, date_label)
txt_label = ttk.Label(root, text="Application", font=("Arial", 20, 'bold'), foreground="white", background="darkblue", borderwidth=3, relief="ridge")
txt_label.config()
image = tk.PhotoImage(file=BASEPATH /'schloss.png')
button = tk.Button(root, image=image, command=start_programm)
button.pack()
root.mainloop()
if __name__ == "__main__":
main()
Re: Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 17:02
von Merkator
Das Script soll ein neues Tkinter fenster erzeugen, dass alte wird im nachhinein geschlossen.
Re: Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 17:27
von Merkator
PermissionError: [Errno 13] Permission denied: PosixPath('/home/peerpri07/Python/Application/security.py')
Re: Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 17:51
von __deets__
Ist das die richtige Datei, und hat sie die richtigen Berechtigungen, und hat sie ein shebang? Und versuchst du schon wieder mad hax0r tools zu schreiben?
Re: Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 18:01
von Merkator
Ja es ist die richtige Datei, ich weiß nicht wie ich der Datei die Berechtigung geben kann, ich weis nicht wie ich der ein shebang geben kann. Und Nein, versuche ich nicht. Nur Tkinter Programm
Re: Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 18:08
von __deets__
Kannst du das Programm auf der Kommandozeile genau so ausfuehren? Und den Begriff shebang darfst du mal in google werfen, um zu lernen, was das ist, und wie man es richtig macht. Wer hacken will, muss Probleme selber loesen...
Re: Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 18:13
von Merkator
Ich will doch garnicht hacken??? Ich will ein normales Tkinter Programm schreiben
Re: Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 21:32
von Sirius3
Man startet keine externen Python-Programme, wenn man auch ganz einfach die Funktionalität über ein Modul bereitstellen kann.
Wenn ich Dich richtig verstanden habe, soll `security` einfach ein neues Fenster aufmachen. Das macht man per tk.Toplevel. Der Weg über ein weiteres Programm ist meist falsch.
Re: Zugriff auf Datei im selben Ordner
Verfasst: Montag 6. Februar 2023, 22:00
von __blackjack__
@Merkator: Ja klar, normales Programm das bildschirmfüllend wie ein Anmeldebildschirm aussieht wo der Benutzer dann seine Zugangsdaten eingibt, von der Person die ihre Projekte immer PasswordStealer nennt, auch wenn die was ganz anderes machen.

Re: Zugriff auf Datei im selben Ordner
Verfasst: Dienstag 7. Februar 2023, 14:49
von Merkator
Sirius3 hat geschrieben: Montag 6. Februar 2023, 21:32
Man startet keine externen Python-Programme, wenn man auch ganz einfach die Funktionalität über ein Modul bereitstellen kann.
Wenn ich Dich richtig verstanden habe, soll `security` einfach ein neues Fenster aufmachen. Das macht man per tk.Toplevel. Der Weg über ein weiteres Programm ist meist falsch.
ok danke. Wie mache ich das Bild denn Kleiner und verschiebe es an eine bestimmte stelle
Re: Zugriff auf Datei im selben Ordner
Verfasst: Dienstag 7. Februar 2023, 15:24
von Sirius3
Warum nimmst Du nicht gleich eine verkleinerte Version? Die Position des Bildes ergibt sich ja aus der Position des Buttons, und die ergibt sich aus dem Layout, so dass alle Elemente richtig angeordnet werden, da mußt Du also nichts selbst verändern. Mach ein sauberes Layout und gut ist.
Re: Zugriff auf Datei im selben Ordner
Verfasst: Dienstag 7. Februar 2023, 16:33
von Merkator
Naja im Grunde werde ich am ende 8 Bilder haben die im kreis angeordnet sind. Da weis ich halt nicht wie ich das dann gut darstellen kann
Re: Zugriff auf Datei im selben Ordner
Verfasst: Dienstag 7. Februar 2023, 20:24
von Sirius3
Ah, solangsam kommen wir dem Problem näher. Für graphische Ausgaben gibt es in Tk das Canvas.
Re: Zugriff auf Datei im selben Ordner
Verfasst: Mittwoch 8. Februar 2023, 07:49
von Merkator
ok schaue ich mir an danke