2012-05-23 1 views
0

레이아웃을 사용하지 않고 상위 위젯에 위젯을 추가하고 있습니다. 레이아웃을 수행하려고하는 것과 충돌하는 일부 애니메이션을 사용하고 있기 때문입니다.레이아웃이없는 상위 위젯의 가운데 위젯

부모 위젯 크기를 조정할 때도 수동으로 부모 위젯에 맞 춥니 다.

위치를 직접 계산하고 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_()) 
+0

을하고 너무 자주, 답을 게시 한 직후 것은 마음에 오는 :

다음은 작동합니다. 내가 무엇을했는지 알기 위해 다음 줄을 사용하여 resizeEvent를 구현해야했다. widget.move ((event.size(). width() - widget.sizeHint(). width())/2, (event.size() .height() - widget.sizeHint(). height())/2) –

+0

죄송합니다. – Benjamin

답변

0

당신은 센터에 자식 위젯을 배치 할 QWidget.setGeometry를 사용할 수 있습니다 여기에

내가 달성하기 위해 노력하고있어의 간단한 예입니다. 메인 위젯에 어떤 변화가 일어나더라도 그대로 유지하려면 원하는 변경 사항에 해당하는 이벤트를 catch해야합니다.

#!/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) 
관련 문제