wxPython: Selbst gemachter MessageDialog

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten