Форум сайта python.su
Методом научного тыка не получилось, но мне нужно, чтобы панель с создаваемым рисунком была в одном окне, а элементы управления в другом. Я это делаю для того, чтобы пользователь мог устанавливать максимальный размер картинки, какой ему только позволит монитор, и чтоб при этом окно настроек не мешало. Для примера прилагаю код с одним единственным слайдером.
Может, кто-нибудь подскажет, как это сделать, чтоб слайдер был в одном окне, а полотно в другом окне?
#!/usr/bin/python
# cpu.py
import wx
import math
import wx.lib.wxcairo
class CPU(wx.Panel):
def __init__(self, parent, id):
wx.Panel.__init__(self, parent, id, size=(600, 600))
self.parent = parent
self.SetBackgroundColour('#FBFF05')
self.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, event):
dc = wx.PaintDC(self)
w,h = dc.GetSizeTuple()
cr = wx.lib.wxcairo.ContextFromDC(dc)
pos = self.parent.GetParent().GetParent().sel
rect = pos
cr.set_line_width (10)
cr.set_source_rgba(1, 0, 1, 1)
cr.move_to(20, 20)
cr.line_to(380, rect)
cr.stroke()
class CPUWidget(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(800, 600))
self.sel = 0
panel = wx.Panel(self, -1)
centerPanel = wx.Panel(panel, -1)
self.cpu = CPU(centerPanel, -1)
hbox = wx.BoxSizer(wx.HORIZONTAL)
self.slider = wx.Slider(panel, -1, self.sel, 0, 400, (20, 20), (25, 500),
wx.VERTICAL | wx.SL_LABELS | wx.SL_INVERSE)
self.slider.SetFocus()
hbox.Add(centerPanel, 0, wx.LEFT | wx.TOP, 20)
hbox.Add(self.slider, 0, wx.LEFT | wx.TOP, 23)
self.Bind(wx.EVT_SCROLL, self.OnScroll)
panel.SetSizer(hbox)
self.Centre()
self.Show(True)
def OnScroll(self, event):
self.sel = event.GetInt()
self.cpu.Refresh()
app = wx.App()
CPUWidget(None, -1, 'cpu')
app.MainLoop()
Отредактировано (Июль 12, 2010 17:22:28)
Офлайн