[python] Scrolled WxCanvas

Jakub Vojacek jakohv na seznam.cz
Středa Březen 28 17:33:31 CEST 2007


Ok, takže nakonec mi s tím poradili na DaniWebu, ale mám další problém. Toto je kod:

##do vstupu se zadavaji 4 cisla jako souradnice cary...
class Canvas:
    def __init__(self,parent):
        self.okno=parent
        self.okno.SetBackgroundColour("#FCFCFE")
        self.radic = wx.FlexGridSizer(2,2,0,0)
        self.canvas = wx.ScrolledWindow(self.okno, -1)
       
        self.canvas.EnableScrolling(True, True)
        
        
        self.P_WIDTH = 1000
        self.P_HEIGHT = 1000
        self.canvas.SetScrollbars(20, 20, self.P_WIDTH/20, self.P_HEIGHT/20)

        self.radic.Add(self.canvas, 1, wx.EXPAND)
        self.radic.Add((0,0))
        sizer=wx.BoxSizer(wx.VERTICAL)
        self.radic.Add(sizer, 1, wx.EXPAND)
        self.radic.Add((0,0))
        self.radic.AddGrowableRow(0, 1)
        self.radic.AddGrowableCol(0, 1)
        sizer2=wx.BoxSizer(wx.HORIZONTAL)
        sizer2.Add(wx.StaticText(self.okno,label="  f(y)=   "),0,wx.ALIGN_CENTER)
        self.vstup=wx.TextCtrl(self.okno)
        sizer2.Add(self.vstup,1,0,wx.ALL)
        sizer.Add(sizer2,0,wx.EXPAND)
        sizer3=wx.BoxSizer(wx.HORIZONTAL)
        button1=wx.Button(self.okno,label="Vykresli")
        sizer3.Add(button1,0,wx.ALIGN_RIGHT)
        sizer.Add(sizer3,0,wx.EXPAND)
        ##
        self.canvas.SetCursor(wx.CROSS_CURSOR)
        self.canvas.Bind(wx.EVT_PAINT, self.OnPaint)
        self.okno.SetSizer(self.radic)
        button1.Bind(wx.EVT_BUTTON,lambda e:self.vykresli())
        self.body=[(0,0,0,0)]
        self.pocet=0
        self.dc=False
    def vykresli(self):
        l=[]
        for prvek in self.vstup.GetValue().split(','):
            l.append(int(prvek))
        self.body=l
        self.dc.BeginDrawing()
        self.dc.DrawLineList([l])
        self.dc.EndDrawing()
    def OnPaint(self, evt):
        self.dc=wx.PaintDC(self.canvas)
        self.dc.BeginDrawing()
        self.dc.DrawLineList(self.body)
        self.dc.EndDrawing()
if __name__ == "__main__":
    okno = wx.App(0)
    parent=wx.MDIParentFrame(None,size=wx.Size(500,500))
    child=wx.MDIChildFrame(parent,title="Graf",id=-1)
    Canvas(child)
    child.Maximize()
    parent.Show()
    okno.MainLoop()

Do vstupuse zadavají čtyři čísla oddělené čárkou. Tato čísla reprezentují souřadnice čáry, která by se po stisknutí tlačítka vykreslit. Čára se vykreslí, ale pak mi to začne házet chyby kterým nerozumím atd. Jak to opravit tak, aby se čára vykreslila a zůstala tam i po skrolování. 

Děkuji

  ----- Original Message ----- 
  From: Jakub Vojacek 
  To: Konference PyCZ 
  Sent: Saturday, March 24, 2007 12:54 PM
  Subject: [python] Scrolled WxCanvas


  Ahoj

  Snažim se udělat jednoduchou tvarbu grafů ve Wx. Ale mám potáže se scrollbary
  Zatím jsem udělal toto:
  import wx
  class Canvas:
      def __init__(self,parent):
          self.okno=parent
          self.radic = wx.FlexGridSizer(3,2,0,0)
          self.canvas = wx.Window(self.okno, -1)
          
          self.sb_vert = wx.ScrollBar(self.okno, -1, style=wx.SB_VERTICAL)
          self.sb_vert.SetScrollbar(0,1000,1000,1000)
          self.sb_hor = wx.ScrollBar(self.okno, -1, style=wx.SB_HORIZONTAL)
          self.sb_hor.SetScrollbar(0,1000,1000,1000)

          self.radic.Add(self.canvas, 1, wx.EXPAND)
          self.radic.Add(self.sb_vert, 0, wx.EXPAND)
          self.radic.Add(self.sb_hor, 0, wx.EXPAND)
          self.radic.Add((0,0))
          
          self.radic.AddGrowableRow(0, 1)
          self.radic.AddGrowableCol(0, 1)


          self.canvas.SetCursor(wx.CROSS_CURSOR)
          self.canvas.Bind(wx.EVT_PAINT, self.OnPaint)
          self.okno.SetSizer(self.radic)
      def vykresli_graf(self,dc):
          dc.BeginDrawing()
          lines=[(-50,-50,50,50)]
          dc.DrawLineList(lines)
          dc.EndDrawing()
      def OnPaint(self, evt):
          dc = wx.PaintDC(self.canvas)
          self.vykresli_graf(dc)
  if __name__ == "__main__":
      okno = wx.App(0)
      parent=wx.MDIParentFrame(None,size=wx.Size(500,500))
      child=wx.MDIChildFrame(parent,title="Graf",id=-1)
      Canvas(child)
      child.Maximize()
      parent.Show()
      okno.MainLoop()

  ale i když je část tý čáry mimoviditelnou část canvasu, scrollbar se nezmění. chtělo by to jako je v Tk:
  canvas["yscrollcommand"] = S.set
  Nelze to nějak nastavit??
  Dík


------------------------------------------------------------------------------


  _______________________________________________
  Python mailing list
  Python na py.cz
  http://www.py.cz/mailman/listinfo/python
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://www.py.cz/pipermail/python/attachments/20070328/7eedd0ae/attachment.htm 


Další informace o konferenci Python