首页 文章

使用鼠标移动QtWidgets.QtWidget

提问于
浏览
1

我想使用鼠标移动QtWidgets.QtWidget( not a QPushButtonQLabel 等) . 我没有找到答案 . 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 回答

  • 1

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

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

    • 这个位置变量让我们称之为"oldPos" .

    • 现在在鼠标内按下更新此位置 .

    • 最后但并非最不重要的是,您将"oldPos"与您的mouseMove实际位置相关联并移动您的小部件 .

    • Wallahhhh,这里我们有一个漂亮而简单的可移动小部件鼠标事件 .

    Here is the simplest example.

    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_())
    

    So simple isn't it? :D

  • -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(),用"self"替换代码中的每个"hGUI",或者如果它是一个参数( except for controls like buttons and labels )则删除它 . 以下是代码,非工作代码与工作代码:https://gist.github.com/anonymous/0707b4fef11ae4b31cf56dc78dd3af80注意:在新代码中,应用程序称为"VirtualMemories" .

相关问题