当我move(x, y)
在 PyQt 中使用函数时,小部件移动到哪个确切坐标?我认为这是相对于某物的,但x
与y
什么有关?
问问题
4823 次
2 回答
2
X 和 Y 是相对于父部件的坐标空间
这是一个可运行的小示例,它将向您展示移动如何相对于小部件的父级。父级可以是None
,这意味着将浮动的顶级小部件。无论如何,它总是相对于父级的坐标一直到屏幕坐标。
from PyQt4 import QtCore, QtGui
from random import randint
from collections import deque
class Widget(QtGui.QWidget):
def __init__(self):
super(Widget, self).__init__()
self.setObjectName("MainWindow")
mainLayout = QtGui.QVBoxLayout(self)
mainLayout.setSpacing(0)
mainLayout.setMargin(20)
self.widgets = deque()
self.widgets.append(None)
self.widgets.append(self)
for i in xrange(3):
w = QtGui.QWidget()
name = "widget%d" % i
color = [str(randint(0,255)) for _ in xrange(3)]
w.setObjectName(name)
w.setStyleSheet("#%s { background: rgb(%s) }" % (name, ','.join(color)))
mainLayout.addWidget(w)
self.widgets.append(w)
self.button = QtGui.QPushButton("Move", self)
self.button.clicked.connect(self.random_move)
def random_move(self):
b = self.button
parent = b.parent()
pos = b.pos()
name = parent and parent.objectName() or "None"
print "\nOld Parent/Pos: ", name, (pos.x(), pos.y())
new_parent = parent
while new_parent is parent:
self.widgets.rotate(1)
new_parent = self.widgets[0]
self.button.setParent(new_parent)
self.button.move(randint(0, 50), randint(0, 50))
pos = b.pos()
name = new_parent and new_parent.objectName() or "None"
print "New Parent/Pos: ", name, (pos.x(), pos.y())
self.button.show()
if __name__ == "__main__":
app = QtGui.QApplication([])
w = Widget()
w.resize(800,600)
w.show()
app.exec_()
每次您单击该按钮时,它都会重新指向不同的小部件,并使用随机移动。您将打印出以前的父级和位置与新的父级和位置。它将始终相对于该父级的左上角。
于 2012-09-05T20:41:49.677 回答