使用鼠标

时间:2017-01-21 21:07:03

标签: python python-3.x pyqt5

我想使用鼠标移动QtWidgets.QtWidget( QPushButton QLabel 等)。我在网上到处搜索,但找不到答案。 mousePressEvent 似乎就是这样,但它不起作用。

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_hGUI(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)

    def setupUi(self, hGUI):
        hGUI.setObjectName("hGUI")
        hGUI.resize(161, 172)
        hGUI.setMinimumSize(QtCore.QSize(200, 200))
        hGUI.setMaximumSize(QtCore.QSize(200, 200))

if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    hGUI = QtWidgets.QWidget()
    ui = Ui_hGUI()
    ui.setupUi(hGUI)

    hGUI.show()
    sys.exit(app.exec_())

我正在使用Python 3.5,我正在使用Qt Designer创建GUI,然后将其转换为python代码。

编辑:我正试图通过点击它来移动无边框窗口。

2 个答案:

答案 0 :(得分:1)

这是一个非常简单的问题先生,

假设您必须拥有一个变量来保存您的小部件的位置并根据您的需要与其进行交互。

  1. 这个位置变量让我们称之为“oldPos”。
  2. 现在,在鼠标按下按下更新此位置。
  3. 最后但并非最不重要的是,您将“oldPos”与您的mouseMove实际位置相关联并移动您的小部件。
  4. Wallahhhh,这里我们有一个漂亮而简单的可移动小部件鼠标事件。
  5. 这是最简单的例子。

    from PyQt5.QtWidgets import QWidget
    
    class MyMovableWidget(QWidget):
        """WToolBar is a personalized toolbar."""
    
        homeAction = None
    
        oldPos = QPoint()
    
        def __init__(self):
            super().__init__()
    
         def mousePressEvent(self, evt):
            """Select the toolbar."""
            self.oldPos = evt.globalPos()
    
        def mouseMoveEvent(self, evt):
            """Move the toolbar with mouse iteration."""
    
            delta = QPoint(evt.globalPos() - self.oldPos)
            self.move(self.x() + delta.x(), self.y() + delta.y())
            self.oldPos = evt.globalPos()
    
    
    if __name__ == "__main__":
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
        coolWidget = MyMovableWidget()
        coolWidget.show()
        sys.exit(app.exec_())
    

    这么简单不是吗? :d

答案 1 :(得分:-1)

我设法让它工作,感谢@bnaecker告诉我代码实际上创建了两个小部件,我已经替换了代码中的一些东西。基本上,只需编辑将.ui转换为.py时生成的代码,这样它只会创建一个小部件。 最多的变化发生在这里:

if __name__ == "__main__":
    import sys
    sys.excepthook = excepthook
    app = QtWidgets.QApplication(sys.argv)
    hGUI = QtWidgets.QWidget(flags=QtCore.Qt.FramelessWindowHint)
    ui = Ui_hGUI()
    ui.setupUi(hGUI)
    hGUI.show()
    sys.exit(app.exec_())

编辑:

if __name__ == "__main__":
    sys.excepthook = excepthook
    app = QtWidgets.QApplication(sys.argv)
    hGUI = Ui_hGUI()
    sys.exit(app.exec_())

在retranslateUi(self)的末尾添加self.show(),替换每个" hGUI"在代码中使用" self"如果它是一个参数,则删除它(除了按钮和标签之类的控件)。 以下是代码,非工作代码与工作代码:https://gist.github.com/anonymous/0707b4fef11ae4b31cf56dc78dd3af80 注意:在新代码中,应用程序被称为" VirtualMemories"。