我有麻煩設置一個child-QWidget在添加到parent-QWidget之後的維度。 問題是,它根本不設置幾何圖形:setGeometry()緊跟在addWidget()問題
from PyQt4 import QtCore, QtGui
class MyWidget(QtGui.QWidget):
def __init__(self):
super(MyWidget, self).__init__()
self.initUI()
def initUI(self):
# setting up parent QWidget
self.setMinimumSize(256, 256)
self.setMaximumSize(256, 256)
self.GL = QtGui.QGridLayout(self)
self.GL.setMargin(0)
# setting up child QWidget
self.GL.myWidget2 = QtGui.QFrame()
self.GL.myWidget2.setMinimumSize(128, 128)
self.GL.myWidget2.setMaximumSize(128, 128)
self.GL.myWidget2.setStyleSheet("background: orange")
# attaching child to parent
self.GL.addWidget(self.GL.myWidget2)
# trying to reposition child in parent's local space
self.GL.myWidget2.setGeometry(QtCore.QRect(0, 128, self.width(), self.height()))
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
widget = MyWidget()
widget.show()
app.exec_()
並稱,將在短暫延遲後的幾何形狀不工作,雖然定時器...(與替換self.GL.myWidget2.setGeometry([...])
):
timer = QtCore.QTimer()
timer.singleShot(10, self.updatePosition)
def updatePosition(self):
self.GL.myWidget2.setGeometry(QtCore.QRect(0, 128, self.width(), self.height()))
...所以我懷疑addWidget(...)方法做回調例如當主線程已經通過self.GL.myWidget2.setGeometry([...])
行時,該控件重新繪製其默認位置。
儘管這是純粹的推測,但如何影響下面的編碼器或執行時機會受到很大的影響!
佈局管理部件的定位。通常情況下,您不要將小部件放置到佈局中並手動放置它們。你想做什麼?也許你想''QLayout'的alignment/setAlignment'? – Avaris
爲什麼'self.GL.myWidget2'而不是'self.myWidget2'? – 2012-12-22 03:58:09
我很抱歉遲到的迴應。 @Avaris:我還沒有意識到小部件可以直接用於其他小部件,並且總是需要佈局。我的目標是實現下面的答案。 X.Jacobs:這是爲了保持關係層次的清晰原因。直接將小部件添加到另一個小部件正是我的意圖 - 謝謝。 – bossi