当前位置: 首页 > 知识库问答 >
问题:

使2个pyqt按钮在鼠标移动时同步移动

宦烈
2023-03-14

因此,目前在伪代码中,我有:

import stuff
import mvbutton as mv

class MasterClass(QWidget):
    def __init__(self, *args):
        QWidget.__init__(self, *args)
        #more setup stuff, layout, etc
        self.addbutton(image,name,size)
    def addbutton(#args):
        self.button=mv.dragbutton(#args)
        #some more setup
        #now rename so that each button has its own name
        if name== "name1":
            self.name1=self.button
        else:
            self.name2=self.button
        self.button=""
    #more code to set up

我取代了dragbutton类中的鼠标运动/按压/释放功能。因此,我不能在那里引用新的self.name#。因此,dragbutton类中的self.move(pos)无法获得self.name#,因为它是不同的self。我有什么办法让它起作用吗?谢了。

共有1个答案

熊锐进
2023-03-14

在试图理解你的需求后做了一些非常粗糙的事情。希望这能有所帮助。

试图增加移动的准确性。不会做实时移动,因为它有滞后和更新的问题。我想搬家不会再紧张了。

from PyQt4 import QtGui
import sys
class MultiButton(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        QtGui.QWidget.__init__(self, *args, **kwargs)
        self._b1 = QtGui.QPushButton("B1")
        self._b2 = QtGui.QPushButton("B2")
        self._arrangeWidgets()
        self.setStyleSheet("background-color: rgb(0, 0, 0);\n"+\
                           "color: rgb(255, 255, 255);\n"+\
                           "border:1px solid #7F462C ;\n")
        self._moveStart = False
        self._startX = 0
        self._startY = 0

    def _arrangeWidgets(self):
        layout = QtGui.QHBoxLayout()
        layout.addWidget(self._b1)
        #horizontal spacing remains constant now
        layout.addSpacing(90)
        layout.addWidget(self._b2)
        self.setLayout(layout)

    def mousePressEvent(self,event):
        self._moveStart = True 
        self._startX = event.pos().x() - self.pos().x()
        self._startY = event.pos().y() - self.pos().y()
        return QtGui.QWidget.mousePressEvent(self, event)
    

    def mouseReleaseEvent(self, event):
        if self._moveStart:
            self.setGeometry(event.pos().x() - self._startX,event.pos().y() - self._startY,self.width(),self.height())
            self._moveStart = False
            self._startX = 0
            self._startY = 0
            
        return QtGui.QWidget.mouseReleaseEvent(self, event)


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    wd = QtGui.QMainWindow()
    wd.resize(500,500)
    mb = MultiButton()
    mb.setFixedSize(200,50)
    wd.setCentralWidget(mb)
    wd.show()
    sys.exit(app.exec_())

这里,MultiButton小部件移动两个按钮,保持两个按钮之间的水平间距始终不变。

 类似资料:
  • 问题内容: 因此,正如标题所述,我想在鼠标拖动时移动椭圆。我先声明了椭圆并将其画出(因为我有8个椭圆,它们带有不同的颜色信息。四个是白色,另一个是红色)。我尝试做我对矩形所做的事情: 但这似乎不起作用。它给我一个错误 我有点困惑,因为我已经阅读了文档,并且Ellipse2D.Double存在这样的变量。 这是一个MCVE: 那么是否有替代算法,或者我只是在语法上缺少什么?我想知道解决方案。谢谢。

  • 任务是将物理光标移动到元素。 尝试以下操作: 和以下内容:

  • 问题内容: 我是Python的新手。我绘制了具有固定坐标的多边形和圆形。现在,我想使用鼠标将此多边形和圆移动到窗口上的其他位置。请指导我该怎么做? 问题答案: 您应该查看QGraphicsView而不是正在执行的操作,它已经内置了所有功能。 http://doc.qt.nokia.com/4.7-snapshot/qgraphicsview.html http://doc.qt.nokia.com

  • 我们将深入研究鼠标在元素之间移动时发生的事件。 事件 mouseover/mouseout,relatedTarget 当鼠标指针移到某个元素上时,mouseover 事件就会发生,而当鼠标离开该元素时,mouseout 事件就会发生。 这些事件很特别,因为它们具有 relatedTarget 属性。此属性是对 target 的补充。当鼠标从一个元素离开并去往另一个元素时,其中一个元素就变成了 t

  • 使用vue做了一个抽奖,分别为1连抽和5连抽,添加了loading变量防止按钮被短时间内被重复点击,但是同时点击1连抽和5连抽,会触发两次请求,如何避免?

  • 本文向大家介绍使用jQuery在移动页面上添加按钮和给按钮添加图标,包括了使用jQuery在移动页面上添加按钮和给按钮添加图标的使用技巧和注意事项,需要的朋友参考一下 创建按钮 data-role=button 给HTML元素添加 data-role="button" 属性。jQuery Moble就会给此元素增强为按钮样式。 Jquery Mobile框架包含了一组最常用的移动应用程序所需的图标