3 Stimmen

wx.BitmapButton aktualisieren?

Edit: (kleine Änderung -> 2. Problem) Ich habe einen BitmapButton & ein TextCtrl erstellt. Das Bild in diesem Button soll sich ändern, wenn ein bestimmter Text in TextCtrl eingegeben wird. Das funktioniert:

def create(self,event):
    self.textinput = wx.TextCtrl(self.panel, pos=(100,20))
    self.picture = wx.Image("pics\\default.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()
    self.picturebutton = wx.BitmapButton(self.panel,-1,self.picture,pos=(100,50))
    self.textinput.Bind(wx.EVT_CHAR, self.changepic)

def changepic(self,event):
    if self.textinput.GetValue = 'test':
        self.picturebutton.Destroy()
        self.picture = wx.Image("pics\\new.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()
        self.picturebutton = wx.BitmapButton(self.panel,-1,self.picture,pos=(100,50))
    event.Skip()

1.) Ich hoffe, dass es eine andere Möglichkeit gibt, anstatt diese Taste zu zerstören und neu zu bauen. Ich habe versucht

self.picturebutton.Refresh()

y

self.picturebutton.Update()

anstelle von

    self.picturebutton.Destroy()
    self.picturebutton=wx.BitmapButton(self.panel,-1,self.picture,pos=(100,50))

aber nichts geschah. Was kann ich tun?

2.) Es sieht so aus, als ob "changepic" genannt wird anfangs y t mein TextCtrl empfängt das Zeichen. Denn wenn ich "test" eingebe, passiert nichts, bis ich eine andere Taste drücke. Das Bild ändert sich also, wenn ich z.B. "testa" eingebe. Aber es soll sich ändern, wenn "test" im TextCtrl steht. Wie kann ich das lösen? Gibt es ein TextCtrl-Ereignis, das erste setzt das Zeichen in das TextCtrl und t eine Funktion aufrufen?

0voto

Yoriz Punkte 3585

Ja, es ist nicht nötig, das Steuerelement neu zu erstellen, um den BMP zu ändern. Aktualisieren ist das, was Sie brauchen, aber anstatt es auf dem Steuerelement aufrufen, rufen Sie es auf dem Steuerelement übergeordneten.

self.Refresh()

Wenn Sie das Ereignis EVT_TEXT verwenden, können Sie event.String verwenden, um den Inhalt des Steuerelements abzurufen

Hier Ihr Code mit diesen Änderungen

def create(self,event):
    self.textinput = wx.TextCtrl(self.panel, pos=(100,20))
    self.picture = wx.Image("pics\\default.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()
    self.picturebutton = wx.BitmapButton(self.panel,-1,self.picture,pos=(100,50))
    self.textinput.Bind(wx.EVT_TEXT, self.changepic)

def changepic(self,event):
    if event.String = 'test':
        self.picture = wx.Image("pics\\new.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()
        self.picturebutton.SetBitmap(self.picture)
        self.Refresh()
    event.Skip()

0voto

nickvans Punkte 878

Yoriz' Verwendung von self.Refresh() war großartig, aber ich musste

self.picturebutton.SetBitmapLabel(self.picture)

statt

self.picturebutton.SetBitmap(self.picture)

damit es funktioniert. SetBitmap scheint keine gültige wx.BitmapButton-Methode zu sein. (Python 2.7)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X