Da ich es sowiso als Grundlage für ein Programm von mir brauche, habe ich eine Klasse für den "Windows-Datei-Dialog" erstellt. Vielleicht kann es noch jemand brauchen.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
******************************************************************************
* Description: Datei-Öffnen/Speichern Dialog von Windows
* Requirements: Python 2.3: http://www.python.org
* pywin32: http://sourceforge.net/projects/pywin32/
******************************************************************************
"""
import win32ui
import win32con
#----------------------------------------------------------------------
class Win32FileDialog(object):
"""
Windows Datei-Öffnen/Speichern-Dialog
"""
#----------------------------------------------------------------------
def __init__(
self,
file_open_dialog = True,
initial_dir = "",
initial_file = "",
def_ext = "",
filterstring = "Alle Dateien (*.*)|*.*",
overwriteprompt = False,
pathmustexist = True,
filemustexist = False,
createprompt = False
):
"""
file_open_dialog: Wenn True, dann wird der Öffnen-Dialog und wenn
False, dann wird der "Speichern unter"-Dialog angezeigt.
initial_dir: Wenn ein gültiger Pfad angegeben wurde, dann wird dieser
als Vorgabe verwendet.
initial_file: Dateiname, der als Vorgabe verwendet werden soll.
def_ext: Vorgegebene Dateinamenerweiterung. Wenn keine Erweiterung
wie z.B. "exe" oder "doc" angegeben wurde, dann wird diese
Erweiterung verwendet und an den Dateinamen angehängt.
filterstring: Eine Filterzeichenfolge könnte z.B. so aussehen.
"Einstellungen (*.ini)|*.ini|Alle Dateien (*.*)|*.*"
overwriteprompt: Wenn True, dann wird eine Meldung ausgegeben, die fragt
ob die Datei überschrieben werden soll.
pathmustexist: Wenn True, dann muss der Ordner existieren.
filemustexist: Wenn True, dann muss die Datei existieren.
createprompt: Wenn True, dann wird, wenn die Datei nicht existiert,
eine Meldung ausgegeben, die fragt ob die Datei
neu erstellt werden soll.
"""
# Daten übernehmen
self.file_open_dialog = file_open_dialog
self.initial_dir = initial_dir
self.initial_file = initial_file
self.def_ext = def_ext
self.filterstring = filterstring
# Flags zusammensetzen
self.flags = win32con.OFN_HIDEREADONLY
if overwriteprompt:
self.flags = self.flags | win32con.OFN_OVERWRITEPROMPT
if pathmustexist:
self.flags = self.flags | win32con.OFN_PATHMUSTEXIST
if filemustexist:
self.flags = self.flags | win32con.OFN_FILEMUSTEXIST
if createprompt:
self.flags = self.flags | win32con.OFN_CREATEPROMPT
#----------------------------------------------------------------------
def show_file_dialog(self):
"""
Zeigt den Datei-Öffnen/Speichern Dialog an und gibt den ausgewählten
Dateinamen zurück.
"""
filedialog = win32ui.CreateFileDialog(
self.file_open_dialog, #bFileOpen
self.def_ext, #defExt
self.initial_file, #fileName
self.flags, #flags
self.filterstring #filter
)
# Anfangsverzeichnis setzen
if self.initial_dir:
filedialog.SetOFNInitialDir(self.initial_dir)
# Dialog anzeigen
retval = filedialog.DoModal()
# Rückgabe und Exit
pathname = filedialog.GetPathName()
filedialog = None
if retval == 1:
return pathname
else:
return ""
#----------------------------------------------------------------------
if __name__ == "__main__":
# Öffnen-Dialog testen
print Win32FileDialog(
True,
initial_dir = "%SystemRoot%",
initial_file = "win.ini",
def_ext = "ini",
filterstring = "INI-Datei (*.ini)|*.ini|Alle Dateien (*.*)|*.*",
filemustexist = True
).show_file_dialog()
# Speichern-Dialog testen
print Win32FileDialog(
False,
initial_dir = "%SystemRoot%",
filterstring = "INI-Datei (*.ini)|*.ini|Alle Dateien (*.*)|*.*"
).show_file_dialog()
Gerold
