beim zoomen wird das fensternur neu gezeichnet wenn sich der scroll balken bewegt
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: cp1252 -*-
import wx
class Hpgl_viewer(wx.Frame):
def __init__(self, parent=None, id=-1, title='HPGL Viewer'):
wx.Frame.__init__(self, parent, id, title, size=(300, 350))
#daten von hpgl load
self.bohrpos = [(203, 102, 360), (305, 102, 360), (406, 102, 360), (508, 102, 360)]
self.platine = max(t[0] for t in self.bohrpos)+150, max(t[1] for t in self.bohrpos)+150
self.zoomfaktor = 12.0
self.Hpgl_Faktor = 40.0
self.raster = 2.54
size = self.platine #(580, 580)
# Panel für Button und Scrollfenster
panel = wx.Panel(self, -1, size=(300,350))
#Button
self.button = wx.Button(panel, -1, "Beenden")
# Zoomfaktor
self.text_zoom =wx.StaticText(panel, -1, "Zoomfaktor:")
self.faktor_auswahl_feld = wx.Choice(panel,-1,(40,15),choices =('50%','100%','200%'))
self.faktor_auswahl_feld.SetSelection(1)
#'horizontal arangment
self.eingabesizer = wx.BoxSizer(wx.HORIZONTAL)
self.eingabesizer.Add( self.text_zoom,0,wx.ALIGN_LEFT)
self.eingabesizer.Add( self.faktor_auswahl_feld,0,wx.ALIGN_LEFT)
self.eingabesizer.Add((10, 10))
self.eingabesizer.Add( self.button,0,wx.ALIGN_LEFT)
#Scrollfenster
self.scrollw = wx.ScrolledWindow(panel, -1,
style=wx.SUNKEN_BORDER, size=(250,250))
self.scrollw.SetScrollbars(1, 1, self.platine[0]-2,self.platine[1]-2)
#Sizer
mainsizer = wx.BoxSizer(wx.VERTICAL)
mainsizer.Add((10, 10))
mainsizer.Add(self.eingabesizer, 0, wx.ALIGN_CENTER)
mainsizer.Add((10, 10))
mainsizer.Add(self.scrollw, 0, wx.ALIGN_CENTER)
panel.SetSizer(mainsizer)
#Bindungen
self.Bind(wx.EVT_BUTTON, self.close, self.button)
self.Bind(wx.EVT_CHOICE, self.EvtChoice, self.faktor_auswahl_feld)
# Bild, auf dem die Grafik gezeichnet wird
self.bmp = self.get_base_bitmap(size)
# Aufruf Paint-Event
self.scrollw.Bind(wx.EVT_PAINT, self.on_paint)
# und jetzt wird gezeichnet
self.drawPicture()
def EvtChoice(self, event):
#self.dr.SetUserScale(2,2)
#self.drawPicture()
if event.GetString() == '50%':
self.zoomfaktor = 6.0
if event.GetString() == '100%':
self.zoomfaktor = 12.0
if event.GetString() == '200%':
self.zoomfaktor = 24.0
self.bmp = self.get_base_bitmap(self.platine)
self.drawPicture()
"""
HIER LIEGT DER FEHLER DENK ICH
"""
def get_base_bitmap(self, size):
bmp = wx.EmptyBitmap(*size)
self.dr = wx.MemoryDC(bmp)
self.dr.SetBackground(wx.WHITE_BRUSH)
self.dr.Clear()
self.dr.SelectObject(wx.NullBitmap)
return bmp
def on_paint(self, event=None):
wx.BufferedPaintDC(self.scrollw, self.bmp, style=wx.BUFFER_VIRTUAL_AREA)
def drawPicture(self):
self.dr = wx.MemoryDC(self.bmp)
gapx = 10
gapy = 50
platinex = int(self.platine[0]/self.Hpgl_Faktor*self.zoomfaktor)
platiney = int(self.platine[1]/self.Hpgl_Faktor*self.zoomfaktor)
#pointliste abhängig vom zoomfaktor erstellen
#feldsizer = wx.BoxSizer( wx.VERTICAL )
#self.dr = wx.PaintDC(self)
self.dr.SetBrush(wx.Brush(colour = wx.BLACK, style = wx.SOLID))
# Platine zeichnen
self.dr.DrawRectangle(gapx, gapy, platinex+20, platiney+20) #schwarzes feld
self.dr.SetPen(wx.Pen(colour = wx.WHITE, width = 1, style = wx.SOLID))
self.dr.DrawRectangle(gapx+10,gapy+10, platinex,platiney) # platinenummriss
# Nullpunkt cross
# fix in x30
nullx = 30
nully = gapy + platiney
self.dr.DrawLine(nullx-5,nully,nullx+5,nully)
self.dr.DrawLine(nullx,nully-5,nullx,nully+5)
# Bohrpunkte
pointlist =[]
for bohrung in self.bohrpos:
pointlist.append((int((bohrung[0]/self.Hpgl_Faktor)*self.zoomfaktor) + nullx , nully - int((bohrung[1]/self.Hpgl_Faktor)*self.zoomfaktor)))
self.dr.SetBrush(wx.Brush(colour = wx.GREEN, style = wx.SOLID))
self.dr.SetPen(wx.Pen(colour = wx.GREEN, width = 1, style = wx.SOLID))
for point in pointlist:
self.dr.DrawCirclePoint(point,4)
#print pointlist
# gitter
self.dr.SetPen(wx.Pen(colour = wx.WHITE, width = 1, style = wx.SOLID))
rasterpixel = int(self.zoomfaktor*self.raster)
#print rasterpixel
anzahlx = int(platinex/rasterpixel) #2,54mm raster =zoomfaktor * 2,54
anzahly = int(platiney/rasterpixel)
gitterpunkte = []
for punktex in range(anzahlx+1):
for punktey in range(anzahly+1):
self.dr.DrawPoint(nullx + punktex * rasterpixel,nully - punktey * rasterpixel)
self.dr.SelectObject(wx.NullBitmap)
def close(self, event):
self.Destroy()
def main():
app = wx.App()
frame = Hpgl_viewer()
frame.Show()
app.MainLoop()
if __name__ == "__main__":
main()