Seite 1 von 1
TextControl um Datei zu bestimmen
Verfasst: Freitag 5. September 2008, 09:47
von bonaire
Hallo,
ich möchte dem Benutzer in meiner Anwendung ermöglichen, ein bestimmtes Verzeichns auszuwählen. Wie ich den entsprechenden Dialog starten kann, weiß ich (wx.DirSelector()).
Ich suche nun aber noch nach dem TextControl, dass den Dialog startet und bei dem der Benutzer sehen kann, welchen Pfad er gewählt hat.
Unter Windows ist das jenes, wo rechts ein Button "Durchsuchen" zur Verfügung steht, unter Mac ist es ein Dreieck.
Gibt es so ein TextControl gar nicht, oder suche ich nur nicht richtig?
cu
Verfasst: Freitag 5. September 2008, 10:12
von BlackJack
Schau mal in der Demo unter "Pickers", da findest Du solche Widgets, z.B. `FilePickerCtrl`.
Verfasst: Freitag 5. September 2008, 10:20
von bonaire
Vom Allerfeinsten. Danke

Verfasst: Freitag 5. September 2008, 11:48
von bonaire
Scheint doch nicht ganz so einfach zu sein
Ich benutze jetzt das wx.DirPickerCtrl
Wenn ich einen Validator daran binde, funktioniert der überhaupt nicht. Muss man da etwas spezielles beachten?
Das sieht bei mir wie folgt aus:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx
class pathValidator(wx.PyValidator):
def __init__(self, flag):
wx.PyValidator.__init__(self)
self.flag = flag
self.Bind(wx.EVT_CHAR, self.OnChar)
print "Hallo"
def OnChar(self, evt):
#key = chr(evt.GetKeyCode())
print self.flag
evt.Skip()
def Clone(self):
"""
Note that every validator must implement the Clone() method.
"""
return pathValidator(self.flag)
def Validate(self, win):
DirPickerCtrl = self.GetWindow()
text = DirPickerCtrl.GetTextCtrlValue()
print "Welt"
if len(text) == 0:
wx.MessageBox("This field must contain some text!", "Error")
DirPickerCtrl.SetBackgroundColour("pink")
DirPickerCtrl.SetFocus()
DirPickerCtrl.Refresh()
return False
else:
DirPickerCtrl.SetBackgroundColour(
wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))
DirPickerCtrl.Refresh()
return True
def TransferToWindow(self):
print "transfer to"
return True
def TransferFromWindow(self):
print "transfer from"
return True
class pathPanel(wx.Panel):
"""Klasse, die innerhalb eines übergeordneten wx.Notebook genutzt wird."""
def __init__(self, noteBook):
wx.Panel.__init__(self, noteBook)
self.clientTemplateDirLabel = wx.StaticText(self, -1, "Client Templates:")
self.serverTemplateDirLabel = wx.StaticText(self, -1, "Server Templates:")
self.clientTemplateDirInput = wx.DirPickerCtrl(self, message="Select the clients template directory")
self.serverTemplateDirInput = wx.DirPickerCtrl(self, message="Select the servers template directory")
self.clientTemplateDirInput.SetValidator(pathValidator(self.clientTemplateDirInput.GetTextCtrlValue))
self.serverTemplateDirInput.SetValidator(pathValidator(self.clientTemplateDirInput.GetTextCtrlValue))
...
"Hallo" wird interessanter Weise 4 mal ausgegeben, der Rest wird ignoriert.
Verfasst: Freitag 5. September 2008, 12:09
von bonaire
Mein Fehler: Statt GetTextCtrlValue() muss es GetPath() lauten. GetTextCtrlValue() bezieht sich lustiger Weise auf den Durchsuchen-Button.