Seite 1 von 1

Verzeichnis in Dialog auswählen

Verfasst: Donnerstag 29. Mai 2008, 10:09
von dv6
Hallo,
ich stehe vor folgendem Problem:

Ich würde gerne ein GUI mit tkinter erstellen, in dem man in einem Entry einen Verzeichnispfad angeben muss. Nun würde ich gerne über einen Durchsuchen-button die Möglichkeit bieten, das entspr. Verzeichnis auszuwählen.
Deshalb suche ich einen Verzeichnis-auswahl Dialog.
tkFileDialog funktioniert in dem Falle nicht wirklich, weil ich da ja eine Datei auswählen müsste und nicht nur ein Verzeichnis.

Deshalb die Frage: Gibt es einen entsprechenden vorgefertigten Dialog?
Wenn nein, hat jemand eine Idee, wie man sich so etwas selbst zusammenbasteln könnte?

Vielen Dank schonmal

Gruß
Christian

Verfasst: Donnerstag 29. Mai 2008, 11:31
von BlackJack
Schau Dich noch mal in `tkFileDialog` um, da gibt's auch was für Verzeichnisse.

Verfasst: Donnerstag 29. Mai 2008, 12:55
von dv6
Naja, wie gesagt hab ich das ja bereits getan, aber ich hab nur eine Dateiauswahl gefunden....

Verfasst: Donnerstag 29. Mai 2008, 13:09
von BlackJack
Dann schau halt noch mal gründlicher. :roll:

Verfasst: Donnerstag 29. Mai 2008, 13:10
von HWK
Dann hast Du nicht genau genug gesucht: askdirectory()
MfG
HWK

Verfasst: Freitag 30. Mai 2008, 07:25
von dv6
Oh, das war in meiner Dokumentation einfach mal großzügig ausgelassen und im Internet hab ich's auch nicht gefunden.

Vielen Dank auf jeden Fall.

Jetzt hab ich aber noch eine Frage:

Wenn ich mir über tkFileDialog.asksaveasfilename() das Dialogfeld anzeigen lasse, wird zusätzlich zu meinem (root-) GUI und dem Dialogfeld noch ein 3. Fenster geöffnet, das leer ist.

Gibt es irgendeine Möglichkeit das auszublenden?

Ich hab schon nach Lösungen gesucht und Beiträge gefunden in denen geraten wird, das Fenster über die withdraw-Funktion auszublenden, aber das funktioniert bei mir leider nicht.

Hier mal ein Codeausschnitt:

Code: Alles auswählen

root = Tk()

def SelectSource(event):
    global SourceDir
    SourceDir=tkFileDialog.askdirectory()


global_frame = Frame(root, relief = GROOVE, borderwidth=4)
global_frame.grid(row = 0, column = 0, sticky=NS)

butSource = Button(global_frame, name='butsource', text='Browse', width=10)
butSource.grid(column = 2, row=1)
butSource.bind("<Button-1>", SelectSource)    


root.mainloop()[code=py]
[/code]

Gruß

Verfasst: Freitag 30. Mai 2008, 07:52
von BlackJack
Also bei mir öffnet sich kein drittes Fenster. Es öffnet sich nur ein zweites Fenster, wenn ich so einen Dialog aufrufe ohne selber vorher ein `Tk`-Exemplar erzeugt zu haben.

Der Quelltext lässt übrigens ein paar böse Praktiken ahnen. Sternchen-Importe und ``global`` sind Böse™.

Das Kommando für den `Button` sollte man mit dem `command`-Argument beim Erzeugen angeben und nicht mit `bind()`. So verhält sich der Button nämlich nicht so wie die Benutzer das erwarten. Man kann zum Beispiel nicht über dem Button die Maustaste drücken, es sich dann noch einmal anders überlegen und bei gedrückter Taste den Button wieder verlassen.

Verfasst: Freitag 30. Mai 2008, 08:12
von midan23
Das kommt mir bekannt vor ... kann es sein, das du einen Mac hast ?

Wenn ja, versuchs mal mit:

Code: Alles auswählen

root = Tk()
try:
    root.tk.call("console", "hide")
except:
    pass
(Ja ich weiss, ein except ohne Angabe der abzufangenden Ausnahme ist keine gute Idee ...)

Verfasst: Freitag 30. Mai 2008, 08:52
von dv6
Naja, ich seh das ganze eben eher pragmatisch, sorry :D

Nichtsdestotrotz hab ich Deinen Rat befolgt und die Sternchenimporte rausgeschmissen. Aber an einer globalen Variable komm ich (zumindest mit meinem bescheidenen Wissen) leider nicht vorbei.

Wie dem auch sei, hab ich mein Problem jetzt in den Griff bekommen.
Ich hatte beim importieren tkinter klein geschrieben.
Nachdem ich das 'T' jetzt groß geschrieben hab funktionierts.

...find ich sehr interessant.... hat da jemand ne Erklärung?

Grüße

Verfasst: Freitag 30. Mai 2008, 09:03
von BlackJack
Du musst aus irgend welchen Gründen ein `tkinter`-Modul (klein geschrieben) im Python-Pfad haben!? Und damit hast Du dann einmal Dein Hauptprogramm mit diesem `tkinter` gestartet und dann noch ein zweites Tk mit `tkFileDialog` weil das nämlich `Tkinter` verwendet.

Re: Verzeichnis in Dialog auswählen

Verfasst: Freitag 24. Februar 2023, 13:18
von Werner237
Ich kämpfe mit dem gleichen Problem. Mal von allen anderen Kleinigkeiten abgesehen:
Bei mir läuft Windows 10 mit Python 3.10.8 (mehrfach installiert, u.a. 'Custom ...' ganz sicher alle Haken drin).
Im CMD-Fenster läuft "python -m tkinter"; "python -m Tkinter" bringt die leider gut bekannte Fehlermeldung "No Module named Tkinter".
Im Python-Programm "from Tkinter import *" wie oft empfohlen bringt leider einfach nur die bekannte Fehlermeldung,
try:
from Tkinter import *
except:
from tkinter import *
läuft. Allerdings im dann laufenden Programm (wie oben Im Beitrag von...)gibt's nach dem Klick auf "Browse" die Fehlermeldung "'tkFileDialog' is not defined. Leider...

Re: Verzeichnis in Dialog auswählen

Verfasst: Freitag 24. Februar 2023, 13:59
von __deets__
Tkinter gibt es nicht mehr. Das war Python 2, Lange tot. Und tkFileDialog ist im Versionswechsel verschwunden, eine Alternative findet sich hier: https://docs.python.org/3/library/dialog.html

Alter Code rottet. Den muss man beständig pflegen, wie die Blumenkästen am Balkon.