在将父级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()
如何影响跟随编码器或执行时间的内容都会非常感激!
答案 0 :(得分:3)
如果您想手动定位窗口小部件,则无需布局:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class orange(QWidget):
def __init__(self, parent=None):
super(orange, self).__init__(parent)
self.setMinimumSize(256, 256)
self.setMaximumSize(256, 256)
self.frame = QFrame(self)
self.frame.setMinimumSize(128, 128)
self.frame.setMaximumSize(128, 128)
self.frame.setGeometry(QRect(0, 128, self.width(), self.height()))
self.frame.setStyleSheet("background: orange")
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
main = orange()
main.show()
sys.exit(app.exec_())