Как очистить содержимое фрейма wxpython при перетаскивании панели? - PullRequest
2 голосов
/ 13 марта 2010

У меня есть 3 панели, и я хочу сделать на них перетаскивание. Проблема в том, что, когда я делаю перетаскивание одного из них, это происходит: http://img41.yfrog.com/img41/9043/soundlog.png http://img41.yfrog.com/img41/9043/soundlog.png

Как я могу обновить рамку, чтобы придать ей цвет, когда панели больше нет?

Это код, который я должен сделать, чтобы перетащить:

def onMouseMove(self, event):
    (self.pointWidth, self.pointHeight) = event.GetPosition()
    (self.width, self.height) = self.GetSizeTuple()
    if (self.pointWidth>100 and self.pointWidth<(self.width-100) and self.pointHeight < 15) or self.parent.dragging:
        self.SetCursor(wx.StockCursor(wx.CURSOR_SIZING))

        """implement dragging"""
        if not event.Dragging():
            self.w = 0
            self.h = 0
            return
        self.CaptureMouse()
        if self.w == 0 and self.h == 0:
            (self.w, self.h) = event.GetPosition()
        else:
            (posw, posh) = event.GetPosition()
            displacement = self.h - posh
            self.SetPosition( self.GetPosition() - (0, displacement))
    else:
        self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))

def onDraggingDown(self, event):
    if self.pointWidth>100 and self.pointWidth<(self.width-100) and self.pointHeight < 15:
        self.parent.dragging = 1
        self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
        self.SetBackgroundColour('BLUE')
        self.parent.SetTransparent(220)
        self.Refresh()

def onDraggingUp(self, event):
    self.parent.dragging = 0
    self.parent.SetTransparent(255)
    self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))

и это привязки к этим событиям:

self.Bind(wx.EVT_MOTION, self.onMouseMove)
self.Bind(wx.EVT_LEFT_DOWN, self.onDraggingDown)
self.Bind(wx.EVT_LEFT_UP, self.onDraggingUp)

При этом, если я нажимаю на верхнюю часть панели и перемещаюсь вниз или вверх, положение панели изменяется (я перетаскиваю панель) на положение мыши.

1 Ответ

1 голос
/ 21 марта 2010

Чтобы обновить родителя при каждом изменении положения self, вы можете добавить

self.parent.Refresh()

сразу после вашего существующего вызова self.SetPosition в вашем def onMouseMove методе. Прямо сейчас вы обновляете фрейм только методом def onDraggingDown, т. Е. При первом нажатии и удерживании левой кнопки мыши, а не при каждом перемещении мыши, пока указанная кнопка удерживается нажатой (т. Е. «Перетаскивание»). "само действие).

Мне не удалось загрузить ваш код в целях тестирования из-за довольно «спамерского» сайта, который вы выбрали для загрузки - сайт постоянно бомбардирует меня рекламой, для меня нет четкого способа просто загрузить, время от времени жалуясь, что он не поддерживает мою машину (я использую Mac и Google Chrome, в некоторых местах сайт настаивает на Windows с IE или Firefox ...) и т. д. и т. д. Я уверен, что вы можете найти другие сайты, более полезнее, чем тот, для людей, которые пытаются помочь вам! -)

...