Форум сайта python.su
Хочу задать окну какую-то произвольную форму, проблема только в том, что если делать как описано в книге Прохоренка, то окно не получается перемещать, а мне нужно иметь возможность перемещать окно. Подскажите как сделать?
Офлайн
Вот человек почти готовое решение предложит. Осталось его доработать напильником.
http://www.forum.crossplatform.ru/index.php?s=&showtopic=4955&view=findpost&p=34539
Офлайн
Можешь не мучиться. Я уже доработал:
def setMoveWindow(widget): """ Позволяет перемещать окно ухватившись не только за заголовок, а за произвольный виджит (widget). """ win = widget.window() cursorShape = widget.cursor().shape() moveSource = getattr(widget, "mouseMoveEvent") pressSource = getattr(widget, "mousePressEvent") releaseSource = getattr(widget, "mouseReleaseEvent") def move(event): if move.b_move: x = event.globalX() + move.x_korr - move.lastPoint.x() y = event.globalY() + move.y_korr - move.lastPoint.y() win.move(x, y) widget.setCursor(QtCore.Qt.SizeAllCursor) return moveSource(event) def press(event): if event.button() == QtCore.Qt.LeftButton: # Корекция геометрии окна: учитываем размеры рамки и заголовока x_korr = win.frameGeometry().x() - win.geometry().x() y_korr = win.frameGeometry().y() - win.geometry().y() # Корекция геометрии виджита: учитываем смещение относительно окна parent = widget while not parent == win: x_korr -= parent.x() y_korr -= parent.y() parent = parent.parent() move.func_dict.update({"lastPoint":event.pos(), "b_move":True, "x_korr":x_korr, "y_korr":y_korr}) else: move.func_dict.update({"b_move":False}) widget.setCursor(cursorShape) return pressSource(event) def release(event): move.func_dict.update({"b_move":False}) widget.setCursor(cursorShape) return releaseSource(event) setattr(widget, "mouseMoveEvent", move) setattr(widget, "mousePressEvent", press) setattr(widget, "mouseReleaseEvent", release) move.func_dict.update({"b_move":False}) return widget
Отредактировано Rodegast (Март 27, 2015 10:28:01)
Офлайн