[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