Ich habe schon wieder ein kleines Problem. Ich moechte, dass man eine Grafik, z.b. einen Kreis ueber ein Bild das in einem Frame angezeigt wird ein und ausblenden kann mit hilfe eines Checkbox.
Hier ist der Code ohne das Bild im hintegrund, man braucht es eigentlich gar nicht zum testen...
Es funktioniert wenn man das scrollen nicht braucht, aber wenn man scrollt verschwinden die Kreise. Die Kreise werden auch nicht an einer fixen Position im Frame angezeigt... d.h. wenn man nach unten scrollt und auf die Checkbox klicht werden die Kreise anzeigt obwohl sie an der Postition nicht sichtbar sein duerfen.
Am besten waehre es uber einen StaticBitmap, den man ueber ein Bild laden kann (wie einen zweiten Layer), zu machen aber das Problem ist dann das der Hintergrund von einen wx.EmptyBitmap nicht transparent ist sondern schwarz. Kann man den transparent machen?
Code: Alles auswählen
import wx
import wx.lib.scrolledpanel as scrolled
import wx.lib.buttons
class MyFrame(wx.Frame):
def __init__(self, parent = None, id = -1, title = "",
size = wx.Size(1000, 750)):
wx.Frame.__init__(self, parent, id, title= '',
pos = wx.Point(0, 0), size = size)
self.checkBox1 = wx.CheckBox(self, label='Draw circle', name='checkBox1', pos=wx.Point(890, 288), size=wx.Size(100, 13), style=0)
self.scrolledWindow1 = wx.ScrolledWindow(self, name='scrolledWindow', pos=wx.Point(0, 24), size=wx.Size(860, 550), style=wx.HSCROLL | wx.VSCROLL)
self.scrolledWindow1.SetBackgroundColour(wx.Colour(0, 90, 159))
self.scrolledWindow1.SetScrollbars(1,1, 3000, 2000)
self.scrolledWindow1.SetScrollRate(40,40)
self.checkBox1.Bind(wx.EVT_CHECKBOX, self.Onklick)
self.circlePoints = []
self.scrolledWindow1.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, event):
if self.checkBox1.GetValue() == True:
dc = wx.PaintDC(self.scrolledWindow1)
dc.Clear()
dc.SetPen(wx.Pen("RED", 4))
for point in self.circlePoints:
dc.DrawEllipse(point[0]-50, point[1]-50, 100, 100)
if self.checkBox1.GetValue() == False:
dc = wx.PaintDC(self.scrolledWindow1)
dc.Clear()
def Onklick (self, event):
if self.checkBox1.GetValue() == True:
self.circlePoints = self.circlePoints + [(290, 132), (300,300), (400, 400)]
self.Refresh()
def main():
app = wx.PySimpleApp()
myframe = MyFrame()
#myframe.Center()
myframe.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Danke!
Gruesse,
Aleksandar