首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用鼠标移动QtWidgets.QtWidget

用鼠标移动QtWidgets.QtWidget
EN

Stack Overflow用户
提问于 2017-01-21 21:07:02
回答 2查看 1.6K关注 0票数 1

我想用鼠标移动QtWidgets.QtWidget (not a QPushButtonQLabel等)。我在网上到处搜索,但找不到答案。mousePressEvent似乎是正确的方式,但它不起作用。

代码语言:javascript
复制
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_())

我使用Python3.5,使用Qt设计器创建GUI,然后将其转换为Python代码。

编辑:我试图移动一个无边界窗口,点击它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-22 03:49:22

这问题很简单,先生,

假设您只需有一个变量,该变量保存小部件的位置,并根据您的需要与其交互。

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

这里是最简单的例子.

代码语言:javascript
复制
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

票数 5
EN

Stack Overflow用户

发布于 2017-01-22 02:16:55

由于@bnaecker告诉我代码实际上创建了两个小部件,我成功地实现了它的工作,我已经替换了代码中的一些内容。基本上,只需编辑当您将.ui转换为.py时生成的代码,这样它就只能创建一个小部件。最主要的变化发生在这里:

代码语言:javascript
复制
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_())

编辑如下:

代码语言:javascript
复制
if __name__ == "__main__":
    sys.excepthook = excepthook
    app = QtWidgets.QApplication(sys.argv)
    hGUI = Ui_hGUI()
    sys.exit(app.exec_())

将self.show()添加到retranslateUi(self)的末尾,将代码中的每个"hGUI“替换为"self”,如果它是参数,则删除它(除了按钮和标签之类的控件外)。这里有两种代码,不工作的代码和工作的代码:https://gist.github.com/anonymous/0707b4fef11ae4b31cf56dc78dd3af80注意:在新代码中,应用程序名为"VirtualMemories“。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41784521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档