Перетаскиваемое окно с pyqt4 - PullRequest
3 голосов
/ 21 августа 2011

простой вопрос: я использую pyqt4 для рендеринга простого окна.Вот код, я выкладываю все это, чтобы его было проще объяснить.

from PyQt4 import QtGui, QtCore, Qt
import time
import math

class FenixGui(QtGui.QWidget):

    def __init__(self):
            super(FenixGui, self).__init__()

        # setting layout type
        hboxlayout = QtGui.QHBoxLayout(self)
        self.setLayout(hboxlayout)

        # hiding title bar
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        # setting window size and position
        self.setGeometry(200, 200, 862, 560)
        self.setAttribute(Qt.Qt.WA_TranslucentBackground)
        self.setAutoFillBackground(False)

                # creating background window label
        backgroundpixmap = QtGui.QPixmap("fenixbackground.png")
        self.background = QtGui.QLabel(self)
        self.background.setPixmap(backgroundpixmap)
        self.background.setGeometry(0, 0, 862, 560)


        # fenix logo
        logopixmap = QtGui.QPixmap("fenixlogo.png")
        self.logo = QtGui.QLabel(self)
        self.logo.setPixmap(logopixmap)
        self.logo.setGeometry(100, 100, 400, 150)

def main():

    app = QtGui.QApplication([])
    exm = FenixGui()
    exm.show()
    app.exec_()


if __name__ == '__main__':
    main()

Теперь вы видите, что я поместил фоновую метку в своем окне.Мне бы хотелось, чтобы окно можно было перетаскивать по экрану, перетаскивая этот ярлык.Я имею в виду: вы нажимаете на ярлык, перетаскиваете ярлык, и все окно появляется вокруг экрана.Это возможно?Я также принимаю не элегантные способы, потому что, как вы можете видеть, я скрыл строку заголовка, поэтому было бы невозможно перетащить окно, если я не сделаю его перетаскиваемым через фоновую метку.

Надеюсь, я объяснилмоя проблема правильно Спасибо большое !!

Маттео Монти

1 Ответ

5 голосов
/ 21 августа 2011

Вы можете переопределить mousePressEvent () и mouseMoveEvent () , чтобы получить местоположение курсора мыши и переместить ваш виджет в это место. mousePressEvent даст вам смещение от позиции курсора к верхнему левому углу вашего виджета, а затем вы можете рассчитать, какой должна быть новая позиция верхнего левого угла. Вы можете добавить эти методы в ваш FenixGui класс.

def mousePressEvent(self, event):
    self.offset = event.pos()

def mouseMoveEvent(self, event):
    x=event.globalX()
    y=event.globalY()
    x_w = self.offset.x()
    y_w = self.offset.y()
    self.move(x-x_w, y-y_w)
...