0

レイアウトを使用せずにウィジェットを親ウィジェットに追加しています(レイアウトが実行しようとしていることと競合するアニメーションを使用しているため)。

子ウィジェットをその親に手動で位置合わせするために何をする必要があるかを理解しようとしています(親ウィジェットのサイズが変更されている場合でも、水平方向と垂直方向に中央に配置します)。

自分で位置を計算してandを使ってみましQWidget.move()QWidget.setGeometry()が、正しい親の幅と高さを取得できないようで、どちらも正しく機能しませんでした。

これが私が達成しようとしていることの簡単な例です:

import sys
from PySide.QtGui import *
from PySide.QtCore import *

class Test( QWidget ):

    def __init__( self, parent=None ):
          super( Test, self ).__init__( parent )

    def sizeHint( self ):
        return QSize( 500, 500 )

    def addPage( self, widget ):
        widget.setParent( self )
        # THIS SEEMS UNPREDICTABLE:
        widget.move( self.sizeHint().width()/2, self.sizeHint().height()/2 ) 

if __name__ == '__main__':
    app = QApplication( sys.argv )

    mainW = Test()
    childW = QPushButton( 'centre me please' )
    mainW.addPage( childW )
    mainW.show()

    sys.exit( app.exec_() )
4

1 に答える 1

0

QWidget.setGeometryを使用して、子ウィジェットを中央に配置できます。メインウィジェットに何が起こってもそのままにしておきたい場合は、予想される変更に対応するイベントをキャッチする必要があります。

以下が機能するはずです。

#!/usr/bin/env python


from PyQt4 import QtGui, QtCore
import sys

class Application(QtGui.QApplication):

    def __init__(self):
        QtGui.QApplication.__init__(self, sys.argv)

        self.main = MyWidget()
        self.main.show()


class MyWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QLabel.__init__(self, parent)

        self.setStyleSheet("QWidget { background-color : white}")
        self.setGeometry(0, 0, 200, 200)

        self.sub_widget = QtGui.QWidget(self)
        self.sub_widget.setStyleSheet("QWidget { background-color : black}")
        self.sub_widget.setGeometry((self.width()-100)/2, (self.height()-100)/2 , 100, 100)

    def resizeEvent(self, event):

        self.sub_widget.setGeometry((self.width()-100)/2, (self.height()-100)/2 , 100, 100)
于 2012-05-23T16:26:54.933 に答える