Dateiname übergeben

Fragen zu Tkinter.
Antworten
gahleitner
User
Beiträge: 35
Registriert: Montag 1. Mai 2017, 09:57

Hallo!

Ich habe mir einen Macrorecorder (mit einiger Hilfe) programmiert. Die Aufnahme funktioniert schon ganz gut, ich speichere die Macros mittels filedialog.asksaveasfilename von tkinter. Beim Ausführen des Makros mittels Button und filedialog.askopenfilename möchte ich aber noch den Dateinamen an eine Listbox übergeben. Wie mache ich das?
Bin noch Anfänger - bitte helft mir.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst nur an der "Stelle" den "Code" einfügen, dann klappts.

Wo stelle und Code sind weiß ich aber nicht - ich kenne deinen Code ja nicht.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

gahleitner hat geschrieben:Beim Ausführen des Makros mittels Button und filedialog.askopenfilename möchte ich aber noch den Dateinamen an eine Listbox übergeben. Wie mache ich das?
Diese Reihnefollge paß nicht:

Falsche Reihenfolge:
- File mit Macros aussuchen.
- evtl. es in den Speicher laden,
- oder dem Makrointerpreter einen Zugriff zum Filelesen geben
- den Macrointerpreter starten
- und der soll dann den Filenamen in eine Listbox schreiben???

Der hat wahrscheinlich keine Ahnung, wie der File hieß.
Und wo die Listbox ist, davon hat er erst recht keine Ahnung. So etwas geht ihn ja auch überhaupt nichts an. Er hat nur die Macros abzuarbeiten und sonst nichts.

Richtige Reihenfolge:
- File mit Macros aussuchen
- den Filenamen in die Listbox eintragen
- den Macrointerpreter starten

Was spricht da dagegen, oder wo liegt die Schwierigkeit?
gahleitner
User
Beiträge: 35
Registriert: Montag 1. Mai 2017, 09:57

Hallo!
Naja - von einen Eingabefeld übergibt man mit Entry.get() - gibt es auch einen Befehl (command) um den dateinamen weiterzugeben? Bin noch Anfänger und weiß keinen, der das macht.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich war wohl nicht deutlich genug - ohne deinen Code zu kennen, kann man die Frage nicht beantworten. Also bitte poste den, dafuer gibt es die tolle Code-Box die man hier direkt mittels "Code auswaehlen" benutzt.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

gahleitner hat geschrieben:Hallo!
Naja - von einen Eingabefeld übergibt man mit Entry.get() - gibt es auch einen Befehl (command) um den dateinamen weiterzugeben? Bin noch Anfänger und weiß keinen, der das macht.
Nein, Du mußt eine Methode haben, die Du aufrufst.

Ich habe etwa eine solche Methode implementiert, könnte auch eine Funktion sein, die einen Filedialog öffnet, und falls der File existiert, ihn lädt und ausführt, ähnlich wie Dein Macro Interpreter. Da wird doch der Filename gefunden. Und wenn er gefuinden wird, kann man ihn nach "if filename" in die Listbox schreiben.

Code: Alles auswählen

def show_load_dialog(msg,root = widget('/')):
    file_opt = options = {}
    options['defaultextension'] = '.py'
    options['filetypes'] = [('python files', '.py'), ('gui files', '.gui'), ('all files', '*')]
    options['initialfile'] = 'Backup.py'
    options['parent'] = root
    options['title'] = 'Load & Edit: ' + msg
    
    filename = tkFileDialog.askopenfilename(**file_opt)
    if filename:
Du mußt nur eine Funktion oder Methode haben, oder diese noch schreiben, die den Filenamen als Parameter übergeben kommt, und ihn dann in die Listbox einträgt. Wo ist denn da das Problem? Du rufst doch auch askopenfilename auf und bekommst dann den Filenamen.

Oder weißt Du nicht, wie man etwas in eine Listbox einträgt?
gahleitner
User
Beiträge: 35
Registriert: Montag 1. Mai 2017, 09:57

Ich habe es auch so geschrieben wie du.
mit filename=filedialog.askopenfilename(....) und mit listbox.insert(END,filename) in die Listbox übergeben. Es wird aber statt des Dateinamens eine Zahl mit einer oder zwei kommastellen in die Listbox geschrieben. Was kann da falsch sein.
Bei dem Parameter "filename" wird doch nur der Dateiname übernommen und nicht der ganze Pfad, oder?
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

gahleitner hat geschrieben:Bei dem Parameter "filename" wird doch nur der Dateiname übernommen und nicht der ganze Pfad, oder?
Warum fragst Du das? Es gibt doch eine einfache Möglichkeit das herauszufinden, nämlich:

print(filename)

Und siehe da, es war der ganze Pfad

Wenn Du das machst:

import os

Dann bekommst Du den letzten Teil das Pfades, das ist der filename ohne auch den Directory Pfad durch:

os.path.basename(filename)
gahleitner
User
Beiträge: 35
Registriert: Montag 1. Mai 2017, 09:57

Vielen Dank für deine Hilfe.
Gibt es einen command um die Dateiendung wegzubekommen?
BlackJack

@gahleitner: Es gibt in `os.path` eine Funktion um den Namen und die Erweiterung zu trennen.
gahleitner
User
Beiträge: 35
Registriert: Montag 1. Mai 2017, 09:57

Hallo!
Ich möchte einen in der Listbox ausgewählten Eintrag mittels Entf-Taste wieder entfernen. Geht das? Wie muss ich das definieren?
gahleitner
User
Beiträge: 35
Registriert: Montag 1. Mai 2017, 09:57

@BlackJack Wie heißen die Funktionen in os.path - wie muß ich das definieren?
BlackJack

@gahleitner: Welche Funktionen in `os.path` zur Verfügung stehen, steht in der Dokumentation. Die Idee war ja eher das Du Dir mal anschaust was es dort alles gibt, und vielleicht auch ein bisschen in einer Python-Shell probierst. Sonst musst Du ja wegen jeder kommenden Kleinigkeit wieder nachfragen und andere für Dich die Funktionen heraus suchen lassen. ;-)
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

gahleitner hat geschrieben:@BlackJack Wie heißen die Funktionen in os.path - wie muß ich das definieren?
Was fragst Du immerzu? Hast Du noch nichts von google gehört?

Geb einfach da ein: python os.path
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Alfons Mittelmeyer: bevor man mit google anfängt, sollte man auf python.org gehen, da findet man die Dokumentation direkt.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Sirius3 hat geschrieben:@Alfons Mittelmeyer: bevor man mit google anfängt, sollte man auf python.org gehen, da findet man die Dokumentation direkt.
Was finde ich denn da bei python.org? Da muss python.org eingeben, dann gebe ich dort im Suchfeld ein "os.path" und dann finde ich nichts, nämlich, ich bekomme das: https://www.python.org/search/?q=os.path&submit=

Wenn ich aber in das google Suchfeld eingebe: python os.path

Und klicke dann auf das erste von google Gefundene, dann erhalte ich das Richtige: https://docs.python.org/2/library/os.path.html
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Alfons Mittelmeyer hat geschrieben:Was finde ich denn da bei python.org? Da muss python.org eingeben, dann gebe ich dort im Suchfeld ein "os.path" und dann finde ich nichts, nämlich, ich bekomme das: https://www.python.org/search/?q=os.path&submit=
Du suchst nur am falschen Ort.
a) Für Python 2.7.xx
https://docs.python.org/2/
b) Für Python 3.5.xx
https://docs.python.org/3.5/

Gruss wuf :wink:
Take it easy Mates!
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

wuf hat geschrieben:docs.python.org/3.5/
Ist mir zuviel zum Tippen. Da tippe ich doch lieber nur "python" gefolgt von dem was ich suche.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Alfons Mittelmeyer hat geschrieben:Ist mir zuviel zum Tippen. Da tippe ich doch lieber nur "python" gefolgt von dem was ich suche.
Welche Suchmaschine verwendest du?
Ich habe es auf 'Googel' & 'StartPage' mit der Eingabe 'Python os.path' versucht. Da wirst du mit einer Flut von Antworten zugedeckt! Wenn ich deine Beiträge hier in diesem Forum lese glaube ich dir nicht, dass dies für dich zu viel Tipparbeit sein kann.

Gruss wuf :wink:
Take it easy Mates!
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

wuf hat geschrieben:Da wirst du mit einer Flut von Antworten zugedeckt! Wenn ich deine Beiträge hier in diesem Forum lese glaube ich dir nicht, dass dies für dich zu viel Tipparbeit sein kann.
Ja ganz schön schwer, wenn man von dieser Flut so erschlagen wird, dass man sich nicht entscheiden kann, was von den ersten vier Einträgen - die sind alle von docs.python.org - man nehmen soll.

Soll man nun nehmen für Python 2.7.13 oder Python 3.6.1 oder 3.3.6 oder 3.4.5?
10.1. os.path — Common pathname manipulations — Python 2.7.13 ...
The os.path module is always the path module suitable for the operating system Python is running on, and therefore ...
http://docs.python.org/2/library/os.path.html

11.2. os.path — Common pathname manipulations — Python 3.6.1 ...
The os.path module is always the path module suitable for the operating system Python is running on, and therefore ...
http://docs.python.org/3/library/os.path.html

11.1. os.path — Common pathname manipulations — Python 3.3.6 ...
To read or write files see open(), and for accessing the filesystem see the os module. The path parameters can be ...
docs.python.org > Python > 3.3.6 Documentation > The Python Standard Library > 11. File and Directory Access

11.2. os.path — Common pathname manipulations — Python 3.4.5 ...
25 Jun 2016 ... To read or write files see open() , and for accessing the filesystem see the os module. The path ...
http://docs.python.org/3.4/library/os.path..
Ist eh egal, steht sowieso dasselbe drin und ansonsten kann man dann noch immer in docs.python.orgs die Version wechseln.
Antworten