Seite 1 von 1

wxPython: Selbst gemachter MessageDialog

Verfasst: Freitag 27. Juli 2007, 14:11
von gerold
Hallo!

Oft möchte man die wx.MessageBox ein wenig erweitern um z.B. ein eigenes Bild anzeigen zu können oder um z.B. im Text eigene Hyperlinks unterbringen zu können.

In diesen Fällen muss man sich selber einen Dialog basteln. Und hier ist eine Basis, von der du z.B. aus gehen könntest.

Bild

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import wx
import textwrap

wx.SetDefaultPyEncoding("iso-8859-15")


class MyMessageDialog(wx.Dialog):
    
    def __init__(self, parent = None, title = "Example"):
        wx.Dialog.__init__(self, parent, -1, title)
        
        # Schriftgröße
        font = self.GetFont()
        font.SetPointSize(9)
        self.SetFont(font)
        
        # Haupt-Sizer
        vbox_main = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(vbox_main)
        
        # Sizer für den oberen Bereich (horizontal)
        hbox_content = wx.BoxSizer(wx.HORIZONTAL)
        vbox_main.Add(hbox_content, 0, wx.EXPAND | wx.ALL, 5)
        
        # Icon
        icon_bmp = wx.ArtProvider_GetBitmap(wx.ART_INFORMATION)
        stat_bmp = wx.StaticBitmap(self, bitmap = icon_bmp)
        hbox_content.Add(stat_bmp, 0, wx.ALL, 15)
        
        # Hinweistext
        message = textwrap.dedent(
            """
            Das ist immer so eine Sache mit diesen Texten. Man weiß 
            nie was man so schreiben soll. Aber irgendwie möchte man 
            doch etwas an Text zusammen bekommen...
            """
        ).strip()
        lab_message = wx.StaticText(self, label = message)
        hbox_content.Add(lab_message, 1, wx.ALL, 5)
        
        # Linie
        vbox_main.Add(wx.StaticLine(self), 0, wx.EXPAND)
        
        # Sizer für die Buttons
        hbox_buttons = wx.BoxSizer(wx.HORIZONTAL)
        vbox_main.Add(hbox_buttons, 0, wx.EXPAND | wx.ALL, 5)
        
        # Cancel-Button
        btn_cancel = wx.Button(self, id = wx.ID_CANCEL, label = "Abbrechen [ESC]")
        hbox_buttons.Add(btn_cancel, 0, wx.ALL, 5)
        
        # Spreizer
        hbox_buttons.AddStretchSpacer()
        
        # OK-Button
        btn_ok = wx.Button(self, id = wx.ID_OK, label = "&OK")
        hbox_buttons.Add(btn_ok, 0, wx.ALL, 5)
        btn_ok.SetFocus()
        btn_ok.SetDefault()
        
        # Layout
        self.Fit()
        if parent:
            self.CenterOnParent()
        else:
            self.Center()


def main():
    """Testing"""
    
    app = wx.PySimpleApp()
    d = MyMessageDialog()
    if d.ShowModal() == wx.ID_OK:
        print "OK"
    else:
        print "nicht OK"


if __name__ == "__main__":
    main()
mfg
Gerold
:-)

Suchworte: Dialog Message Box MessageDialog handgemacht selbst