在将子 QWidget 添加到父 QWidget 后,我在设置子 QWidget 的尺寸时遇到了麻烦。问题是它根本没有设置几何:
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([...])
行时将小部件重绘到其默认位置。
不过,这纯粹是推测性的,任何关于如何addWidget()
影响后续编码器或执行时间的内部信息都将不胜感激!