'Cancel'-Button in wx.MessageDialog/Button

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
Humbalan
User
Beiträge: 59
Registriert: Mittwoch 2. September 2009, 15:11

Hallo Python-Freunde,

habe ein kleines Problem mit Button/MessagDialog.

Code: Alles auswählen

buttonCancel = wx.Button ( self, wx.ID_CANCEL )
... liefert einen 'Cancel'-Button. Aber

Code: Alles auswählen

wx.MessageDialog \
    ( self,
      'Echt?',
      'Frage',
       wx.CANCEL|wx.OK|wx.ICON_EXCLAMATION|wx.STAY_ON_TOP
    ).ShowModal()
... liefert (u. a.) einen 'Abbrechen'-Button.

Ich hätte gern in beiden Fällen den gleichen Text (Entweder 'Abbrechen' oder 'Cancel')! Natürlich könnte ich auch den Button-Text selbst definierern, möchte aber gern wissen, was ich hier falsch mache. Könnt Ihr helfen?

Hier zum Testen ein kleiner (lauffähiger) Ausschnitt aus meinem Programm:

Code: Alles auswählen

import wx

class EntryPanel ( wx.Panel ):
    def __init__ ( self, parent, id ):

        wx.Panel.__init__ ( self, parent, id )
        self.parent = parent
        sizer = wx.GridBagSizer()

        buttonCancel = wx.Button ( self, wx.ID_CANCEL )
        buttonCancel.Bind ( wx.EVT_BUTTON, self.onCancel )

        sizer.Add ( buttonCancel, (0,0), border=5 )

        self.SetSizerAndFit ( sizer )
        self.Centre()

    def onCancel ( self, event ):
        wx.MessageDialog \
            ( self,'Echt?','Frage',
               wx.CANCEL|wx.OK|wx.ICON_EXCLAMATION|wx.STAY_ON_TOP
            ).ShowModal()
        self.parent.Close()

class CMainFrame ( wx.Frame ):
    def __init__ ( self, parent, id ):
        wx.Frame.__init__ ( self, parent, id, "mein Programm" )
        self.myEntries = EntryPanel ( self, wx.ID_ANY )

if __name__ == "__main__":
    myApp = wx.PySimpleApp(0)

    myFrame = CMainFrame ( parent=None, id=wx.ID_ANY )
    myApp.SetTopWindow ( myFrame )
    myFrame.Show()
    myApp.MainLoop()
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

wx.MessagDialog ist ein "nativer" Dialog. Das wird von deinem gesetzten locale abhängen. Ansonsten müsstest du einen eigenen MessageDialog machen, denke ich.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Versuch das mal

Code: Alles auswählen

if __name__ == '__main__':
    app = wx.PySimpleApp(redirect=False)
    wx.SetDefaultPyEncoding('utf-8')
    x = wx.Locale(87)
    print x.GetLocale()
    myFrame = CMainFrame(parent=None, id=wx.ID_ANY)
    myApp.SetTopWindow(myFrame)
    myFrame.Show()
    app.MainLoop()
the more they change the more they stay the same
Benutzeravatar
Humbalan
User
Beiträge: 59
Registriert: Mittwoch 2. September 2009, 15:11

Danke für die schnellen Antworten.

Hilfreich war der Tip von Dav1d. Das Ergebnis: der einzelne Button hat den Text 'Abbruch', der MessageDialog 'Abbrechen'. Damit kann ich leben.
Reine Neugier: weiß jemand, warum es diesen Unterschied gibt? Ist das bewußt so gemacht oder ein Fehler von Python, vielleicht sogar ein Fehler vom Betriebssystem?
Ach ja, ich vergaß: ich arbeite mit Python 2.6.2 und wxPython 2.8 unter Win XP SP 3.

Grüße
Humbalan
Antworten