Verzeichnis in Dialog auswählen

Fragen zu Tkinter.
Antworten
dv6
User
Beiträge: 4
Registriert: Donnerstag 29. Mai 2008, 10:02

Donnerstag 29. Mai 2008, 10:09

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
BlackJack

Donnerstag 29. Mai 2008, 11:31

Schau Dich noch mal in `tkFileDialog` um, da gibt's auch was für Verzeichnisse.
dv6
User
Beiträge: 4
Registriert: Donnerstag 29. Mai 2008, 10:02

Donnerstag 29. Mai 2008, 12:55

Naja, wie gesagt hab ich das ja bereits getan, aber ich hab nur eine Dateiauswahl gefunden....
BlackJack

Donnerstag 29. Mai 2008, 13:09

Dann schau halt noch mal gründlicher. :roll:
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Donnerstag 29. Mai 2008, 13:10

Dann hast Du nicht genau genug gesucht: askdirectory()
MfG
HWK
dv6
User
Beiträge: 4
Registriert: Donnerstag 29. Mai 2008, 10:02

Freitag 30. Mai 2008, 07:25

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ß
BlackJack

Freitag 30. Mai 2008, 07:52

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.
midan23
User
Beiträge: 116
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Freitag 30. Mai 2008, 08:12

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 ...)
dv6
User
Beiträge: 4
Registriert: Donnerstag 29. Mai 2008, 10:02

Freitag 30. Mai 2008, 08:52

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
BlackJack

Freitag 30. Mai 2008, 09:03

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.
Antworten