我正在制作一个用户选择图像qpushbutton的程序。我已经在按钮类中取代了mouseMoveEvent,mousePressEvent和mouseReleaseEvent来获取可移动按钮。按钮当前是独立移动的,但我希望按钮移动,使它们之间的水平距离保持不变。
所以目前在伪代码中我有:
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
我取代了拖动类中的鼠标移动/按下/释放功能。我不能,因此在那里引用新的self.name#
。因此,我的拖动类中的self.move(pos)
无法获得self.name#
,因为它是一个不同的自我。关于如何让它发挥作用的任何想法?感谢。
答案 0 :(得分:0)
在尝试了解您的要求后,做了一些非常粗糙的事情。 希望这会有所帮助。
尝试在移动中添加更多精确度。不会实时移动因为它有滞后和更新的问题。我想移动不再是紧张不安。
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小部件移动两个按钮,保持两者之间的水平空间始终保持不变。