0

PyQt で関数を使用move(x, y)すると、ウィジェットはどの正確な座標に移動しますか? 私はそれを考え出し、x何かyに関連していますが、何に?

4

2 に答える 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 に答える