Sketch Programm auf wxPython in Action

Plattformunabhängige GUIs mit wxWidgets.
de_master
User
Beiträge: 72
Registriert: Samstag 15. Januar 2005, 15:19

Sketch Programm auf wxPython in Action

Beitragvon de_master » Mittwoch 31. Mai 2006, 07:41

Hi @ all,
ich hab nun das Beispielprogramm Sketch genau abgetippt und mehrmals kontroliert. Sieht alles komplett gleich aus.

Wenn man nun beginnt mit zeichnen und den Mauszeiger bewegt erhält man einen Stern von der ersten Position aus. Es sollte jedoch so sein das man frei zeichnen kann.

Kann mir jemand helfen?

Gruss Michael

Hier die Fehlermeldung:
Traceback (most recent call last):
File "E:\PyTutFiles\sketchWindow.py", line 53, in OnMotion
dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
File "C:\Python24\Lib\site-packages\wx-2.6-msw-unicode\wx\_gdi.py", line 4326, in __init__
newobj = _gdi_.new_BufferedDC(*args)
wx._core.PyAssertionError: C++ assertion "wxAssertFailure" failed in ..\..\src\msw\dcmemory.cpp(133): Couldn't select a bitmap into wxMemoryDC
Traceback (most recent call last):
File "E:\PyTutFiles\sketchWindow.py", line 54, in OnMotion
self.drawMotion(dc, event)
File "E:\PyTutFiles\sketchWindow.py", line 63, in drawMotion
self.pos = NewPos
NameError: global name 'NewPos' is not defined

Und hier der Code:

Code: Alles auswählen

import wx

class SketchWindow(wx.Window):
    def __init__(self, parent, ID):
        wx.Window.__init__(self, parent, ID)
        self.SetBackgroundColour("White")
        self.color = "Black"
        self.thickness = 1
        self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
        self.lines = []
        self.curLine = []
        self.pos = (0, 0)
        self.InitBuffer()
        self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
        self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
        self.Bind(wx.EVT_MOTION, self.OnMotion)
        self.Bind(wx.EVT_SIZE, self.OnSize)
        self.Bind(wx.EVT_IDLE, self.OnIdle)
        self.Bind(wx.EVT_PAINT, self.OnPaint)

    def InitBuffer(self):
        size = self.GetClientSize()
        self.buffer = wx.EmptyBitmap(size.width, size.height)
        dc = wx.BufferedDC(None, self.buffer)
        dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
        dc.Clear()
        self.DrawLines(dc)
        self.reInitBuffer = False
       
    def GetLinesData(self):
        return self.lines[:]

    def SetLinesData(self, lines):
        self.lines = lines[:]
        self.InitBuffer()
        self.Refresh()

    def OnLeftDown(self, event):
        self.curLine = []
        self.pos = event.GetPositionTuple()
        self.CaptureMouse()

    def OnLeftUp(self, event):
        if self.HasCapture():
            self.lines.append((self.color,
                               self.thickness,
                               self.curLine))
            self.curLine = []
            self.ReleaseMouse()

    def OnMotion(self, event):
        if event.Dragging() and event.LeftIsDown():
            dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
            self.drawMotion(dc, event)
        event.Skip()

    def drawMotion(self, dc, event):
        dc.SetPen(self.pen)
        newPos = event.GetPositionTuple()
        coords = self.pos + newPos
        self.curLine.append(coords)
        dc.DrawLine(*coords)
        self.pos = NewPos

    def OnSize(self, event):
        self.reInitBuffer = True

    def OnIdle(self, event):
        if self.reInitBuffer:
            self.InitBuffer()
            self.Refresh(False)

    def OnPaint(self, event):
        dc = wx.BufferedPaintDC(self, self.buffer)

    def DrawLines(self, dc):
        for colour, thickness, line in self.lines:
            pen = wx.Pen(colour, thickness, ex.SOLID)
            dc.SetPen(pen)
            for coords in line:
                dc.DrawLine(*coords)

    def SetColor(self, color):
        self.color = color
        self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)

    def SetThickness(self, num):
        self.thickness = num
        self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)

class SketchFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "Sketch Frame", size = (800, 600))
        self.sketch = SketchWindow(self, -1)

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = SketchFrame(None)
    frame.Show(True)
    app.MainLoop()
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Sketch Programm auf wxPython in Action

Beitragvon gerold » Mittwoch 31. Mai 2006, 07:55

de_master hat geschrieben:[code=] File "E:\PyTutFiles\sketchWindow.py", line 63, in drawMotion
self.pos = NewPos
NameError: global name 'NewPos' is not defined[/code]

Hi de_master!

Den Rest des Programmes habe ich mir nicht angesehen, aber zumindest darauf kann ich dich hinweisen:
NewPos != newPos

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
de_master
User
Beiträge: 72
Registriert: Samstag 15. Januar 2005, 15:19

Beitragvon de_master » Mittwoch 31. Mai 2006, 09:13

Danke. Wenns nicht immer diese Kleinigkeiten wären :(
nikgid
User
Beiträge: 1
Registriert: Mittwoch 31. Mai 2006, 14:09

Re: Sketch Programm auf wxPython in Action

Beitragvon nikgid » Mittwoch 31. Mai 2006, 14:12

de_master hat geschrieben:Hi @ all,
ich hab nun das Beispielprogramm Sketch genau abgetippt und mehrmals kontroliert. Sieht alles komplett gleich aus.


Nur für den Fall, dass du es nicht wusstest. Du kannst dir den source-code aller Beispiele des Buches "wxPython in action" von der Website des Manning-Verlages downloaden: http://www.manning-source.com/books/rap ... in_src.zip

Das hilft auf jeden Fall auch gegen Tippfehler ;-)

Niklas
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Re: Sketch Programm auf wxPython in Action

Beitragvon Francesco » Mittwoch 31. Mai 2006, 15:01

nikgid hat geschrieben:
Nur für den Fall, dass du es nicht wusstest. Du kannst dir den source-code aller Beispiele des Buches "wxPython in action" von der Website des Manning-Verlages downloaden: http://www.manning-source.com/books/rap ... in_src.zip

Das hilft auf jeden Fall auch gegen Tippfehler ;-)

Niklas


Ja warum sich die Arbeit antun?
Siehe auch:

http://www.python-forum.de/topic-6114.html
de_master
User
Beiträge: 72
Registriert: Samstag 15. Januar 2005, 15:19

Beitragvon de_master » Donnerstag 1. Juni 2006, 12:02

Na ja nur zur Übung :) Denke wenn mans tippt prägt es sich schneller ein.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder