Hintergrundgrafik in window

Plattformunabhängige GUIs mit wxWidgets.
Antworten
bertms
User
Beiträge: 1
Registriert: Dienstag 16. Juni 2009, 13:36

Liebe Mitmenschen.

Ich hab wenig Ahnung von wxpython, hab mir die letzten Tage Tkinter angeschaut, würde aber lieber mit wx arbeiten.

Was mit Tkinter geht ist folgendes:

Ein Fenster, darin eine Hintergrundgrafik erstellen, darauf verschiedene
Text-Eingabefelder über die Grafik (anhand von x/y Kordinaten)
verteilen.

Geht diese Kombi von grafischem Background und beliebigen anderen
Controls im Vordergrund ebenfalls unter wx? Bei Tkinter gehts ja recht easy mit der Canvas.

Wenn ja, wäre ich über zwei, drei Stichworte froh. Mir würde schon der Name der passenden Control für den Hintergrund reichen, den Rest
such ich mir schon aus der Doku zusammen.

Danke,

Bert.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo bertms

Willkommen in unserem Forum. Betreffs Hintergrundgrafik würde ich mich einmal näher mit den sogenannten 'Device Contexts' auseinandersetzen.

wx.DC
wx.PaintDC
wx.WindowDC
usw.

Hier ein Fenster mit einem Hintergrundmuster und einer Schaltfläche darauf:

Code: Alles auswählen

#!/usr/bin/env python
# coding: UTF-8

#  Skriptname: stipple_filling_03_01.py (wuf)

import wx
from wx.lib.embeddedimage import PyEmbeddedImage

class MyPanel(wx.Panel):

    #~~ Hintergrundmuster im Base64-Format
    PATTERN = PyEmbeddedImage(
        """
        iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c
        6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0
        SU1FB9kFFwwyK7QdU0QAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJ
        TVBXgQ4XAAAAHklEQVQY02Mw6Gb+/+UZ539cNAM+SYNu5v8Mw8IEADJsk+F2
        2ekeAAAAAElFTkSuQmCC
        """)

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        self.SetBackgroundColour('yellow')
        self.Bind(wx.EVT_PAINT, self.on_paint)

        self.stipple_pattern = self.PATTERN.GetBitmap()

        #~~ Lege eine Schaltfäche über den Hintergrund
        self.button1 = wx.Button(self, -1, label='Button1', pos=(10, 5))


    def on_paint(self, event):
        """Der DC muss aufgefrischt werden"""

        dc = wx.PaintDC(self)
        brush = wx.Brush('red', wx.STIPPLE)
        brush.SetStipple(self.stipple_pattern)
        dc.SetBackground(brush)
        dc.Clear()

app = wx.App(redirect=False)

app_win = wx.Frame(None, id=wx.ID_ANY, title="Widget auf Hintergrund",
    size=(400,400))

panel = MyPanel(app_win)

app_win.Center()
app_win.Show()

app.MainLoop()
Gruss wuf :wink:
Take it easy Mates!
Antworten