TextControl um Datei zu bestimmen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
bonaire
User
Beiträge: 13
Registriert: Mittwoch 27. August 2008, 12:27
Wohnort: Karlsruhe

Freitag 5. September 2008, 09:47

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
BlackJack

Freitag 5. September 2008, 10:12

Schau mal in der Demo unter "Pickers", da findest Du solche Widgets, z.B. `FilePickerCtrl`.
bonaire
User
Beiträge: 13
Registriert: Mittwoch 27. August 2008, 12:27
Wohnort: Karlsruhe

Freitag 5. September 2008, 10:20

Vom Allerfeinsten. Danke :D
bonaire
User
Beiträge: 13
Registriert: Mittwoch 27. August 2008, 12:27
Wohnort: Karlsruhe

Freitag 5. September 2008, 11:48

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.
bonaire
User
Beiträge: 13
Registriert: Mittwoch 27. August 2008, 12:27
Wohnort: Karlsruhe

Freitag 5. September 2008, 12:09

Mein Fehler: Statt GetTextCtrlValue() muss es GetPath() lauten. GetTextCtrlValue() bezieht sich lustiger Weise auf den Durchsuchen-Button.
Antworten