当鼠标移动时有 2 个 pyqt 按钮同步移动
Have 2 pyqt buttons move synchronized when mouse moves
我目前正在制作一个程序,用户可以在其中选择图像 qpushbutton。我已经在按钮 class 中取代了 mouseMoveEvent、mousePressEvent 和 mouseReleaseEvent 以获得可移动的按钮。这些按钮目前正在独立移动,但我希望按钮能够移动,以便它们之间的水平距离保持不变。
所以目前在伪代码中我有:
进口东西
将 mvbutton 导入为 mv
class大师班(QWidget):
def __init__(self, *args):
QWidget.__init__(自我,*参数)
#更多设置内容,布局等
self.addbutton(图像、名称、尺寸)
def 添加按钮(#args):
self.button=mv.dragbutton(#args)
#更多设置
#now 重命名以便每个按钮都有自己的名称
如果名称== "name1":
self.name1=self.button
别的:
self.name2=self.button
self.button=""
#更多的代码来设置
我在拖动按钮 class 中取代了鼠标 motion/press/release 功能。我不能,因此在那里引用新的 self.name#
。所以我的dragbutton class中的self.move(pos)
无法得到self.name#
,因为它是不同的自己。关于如何使它起作用的任何想法?谢谢
在尝试了解您的要求后做了一些非常粗略的事情。
希望这有帮助。
编辑
尝试提高移动的准确性。不会进行实时移动,因为它存在滞后和更新问题。估计搬家不会再紧张了
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 小部件移动两个按钮,保持两个按钮之间的水平 space 始终不变。
我目前正在制作一个程序,用户可以在其中选择图像 qpushbutton。我已经在按钮 class 中取代了 mouseMoveEvent、mousePressEvent 和 mouseReleaseEvent 以获得可移动的按钮。这些按钮目前正在独立移动,但我希望按钮能够移动,以便它们之间的水平距离保持不变。
所以目前在伪代码中我有:
进口东西 将 mvbutton 导入为 mv class大师班(QWidget): def __init__(self, *args): QWidget.__init__(自我,*参数) #更多设置内容,布局等 self.addbutton(图像、名称、尺寸) def 添加按钮(#args): self.button=mv.dragbutton(#args) #更多设置 #now 重命名以便每个按钮都有自己的名称 如果名称== "name1": self.name1=self.button 别的: self.name2=self.button self.button="" #更多的代码来设置
我在拖动按钮 class 中取代了鼠标 motion/press/release 功能。我不能,因此在那里引用新的 self.name#
。所以我的dragbutton class中的self.move(pos)
无法得到self.name#
,因为它是不同的自己。关于如何使它起作用的任何想法?谢谢
在尝试了解您的要求后做了一些非常粗略的事情。 希望这有帮助。
编辑
尝试提高移动的准确性。不会进行实时移动,因为它存在滞后和更新问题。估计搬家不会再紧张了
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 小部件移动两个按钮,保持两个按钮之间的水平 space 始终不变。