回答
使用帧的绘图上下文 wxWindow子类(框架/面板/等等......实际上几乎任何wxObject)。
一种方式是这样的
import wx
class MyCustomFrame(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id)
self.Bind(wx.EVT_PAINT,self.OnPaint)
def OnPaint(self,evt):
self.dc = dc = wx.PaintDC(self)
p1 = [0,0]
p2 = [500,0]
for i in range(100):
dc.DrawLine(p1[0],p1[1],p2[0],p2[1])
p1 = [p1[0],p1[1]+5]
p2 = [p2[0],p2[1]+5]
p1=[0,0]
p2 = [0,500]
for i in range(100):
dc.DrawLine(p1[0],p1[1],p2[0],p2[1])
p1 = [p1[0]+5,p1[1]]
p2 = [p2[0]+5,p2[1]]
if __name__ == "__main__":
a = wx.App(redirect=False)
f = MyCustomFrame(None,-1)
#f.OnPaint(None) --- dont do this!!!
f.Show()
a.MainLDop()
您可以通过使用drawlines加快步伐,而不是
def OnPaint(self,evt):
self.dc = dc = wx.PaintDC(self)
verticle_lines = [(i*5,0,i*5,500) for i in range(100)]
horizontal_lines = [(0,i*5,500,i*5) for i in range(100)]
dc.DrawLineList(horizontal_lines+verticle_lines)
为了做你想做的与电网分级机,你可以做到这一点
import wx
class MyCustomPanel(wx.Panel):
def __init__(self,parent,id):
wx.Panel.__init__(self,parent,id)
self.sz = wx.GridSizer(5,5,0,0)
for i in range(25):
self.sz.Add(wx.StaticText(self,-1,str(i)))
self.SetSizer(self.sz)
self.Bind(wx.EVT_PAINT,self.OnPaint)
def OnPaint(self,evt):
self.dc = dc = wx.PaintDC(self)
w,h = self.sz.GetSize()
nr = self.sz.GetRows()
nc = self.sz.GetCols()
cell_w = float(w)/nc
cell_h = float(h)/nr
hlines = [(0,i*cell_h,w,i*cell_h)for i in range(nr+1)]
vlines = [(i*cell_w,0,i*cell_w,h)for i in range(nc+1)]
self.dc.DrawLineList(hlines+vlines)
if __name__ == "__main__":
a = wx.App(redirect=False)
f1 = wx.Frame(None,-1)
f = MyCustomPanel(f1,-1)
#f.OnPaint(None)
f1.Show()
a.MainLoop()
你也可以用这样的风格完成这个
import wx
class SimplePanel(wx.Panel):
def __init__(self,parent,id,str_val):
wx.Panel.__init__(self,parent,id,style=wx.SIMPLE_BORDER)
self.sz = wx.BoxSizer()
self.sz.Add(wx.StaticText(self,-1,str_val),0,wx.ALIGN_CENTER)
self.SetSizer(self.sz)
class MyCustomPanel(wx.Panel):
def __init__(self,parent,id):
wx.Panel.__init__(self,parent,id)
self.sz = wx.GridSizer(5,5,0,0)
for i in range(25):
self.sz.Add(SimplePanel(self,-1,str(i)),0,wx.GROW)
self.SetSizer(self.sz)
if __name__ == "__main__":
a = wx.App(redirect=False)
f1 = wx.Frame(None,-1)
f = MyCustomPanel(f1,-1)
#f.OnPaint(None)
f1.Show()
a.MainLoop()
噢,很好,你知道如何使它与GridSizer或GridBagSizer一起工作来分离小部件吗? (如按钮) – user1513192 2012-07-20 02:43:55
或我怎样才能覆盖GridSizer? – user1513192 2012-07-20 02:50:35
使用一个面板而不是一个框架,并给它使用SetMinSize((w,h))给它的尺寸一个sizer会识别..哦,我看到你的问题...这将需要一段时间来回答... – 2012-07-20 02:55:29
- 1. wxpython如何重新创建网格?
- 2. 如何创建一个“网格”滴管?
- 3. 在wx Erlang中创建一个网格
- 4. 如何创建在wxPython中多行wx.ComboCtrl?
- 5. 如何销毁网格并创建一个新网格
- 6. 在wxpython中嵌入网格
- 7. WxPython多个网格实例
- 8. 在循环中创建多个帧wxPython
- 9. 在wxPython中创建ScrolledWindow
- 10. 我如何从多个网格中创建一架飞机?
- 11. 如何在ag网格中创建子网格?
- 12. 如何在Tkinter中创建一个20x20的网格网格,然后更改特定网格的颜色
- 13. wxPython:如何创建一个bash shell窗口?
- 14. 如何用SVG图标创建一个wxPython按钮?
- 15. 如何在网格下创建按钮?
- 16. 在ExtJs中创建一个具有两个比例的网格
- 17. 如何在SQL中的两个表中创建一个表格
- 18. 用Python创建一个N维网格
- 19. 创建一个三元组的网格
- 20. 创建一个50 x 50的网格
- 21. 创建一个WPF属性网格?
- 22. 创建一个静态网格视图
- 23. 创建一个网格数组
- 24. 如何在wxpython中点击一个按钮来创建额外的窗口
- 25. 在wxPython中显示图像的网格
- 26. 如何创建一个整齐的三列网格?
- 27. 如何创建一个像iPhone主屏幕的图标网格?
- 28. 如何创建一个包含面板的动态网格
- 29. 在Symfony 2中创建表格网格
- 30. 如何创建一个AJAX网站?
你只是想抽出一个网格,或者创建一个小部件网格? – 2012-07-20 17:21:05