PyQt で関数を使用move(x, y)
すると、ウィジェットはどの正確な座標に移動しますか? 私はそれを考え出し、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 に答える
1
ウィジェットに親があるかどうかによって異なります。存在する場合、座標は親ウィジェットに相対的です。それ以外の場合は、デスクトップに相対的です。
詳細については、 のドキュメントmove()
とウィンドウ ジオメトリの概要を参照してください。
于 2012-09-05T18:54:48.050 に答える