如果没有classlevel,pyqt sizehint方法无法正常工作

时间:2013-07-04 08:10:30

标签: python qt pyqt pyqt4

如果我在classlevel中使用QtGui.QWidget,它会通过self.sizeHint()方法给出窗口大小

class MainWin(QtGui.QWidget):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        print(self.sizeHint())

但如果我使用QtGui.QWidget而没有下面提到的类。只是打印 PyQt4.QtCore.QSize(-1,-1)。问题是什么?

app=QtGui.QApplication(sys.argv)
win = QtGui.QWidget()
print(win.sizeHint())
win.setFocusPolicy(QtCore.Qt.StrongFocus)
win.show()


app.exec_()

1 个答案:

答案 0 :(得分:1)

如果没有widget的布局,sizeHint()的默认实现将返回无效大小(-1,-1),否则返回布局的首选大小。 因此,您需要设置一些布局(适用于两种情况):

from PyQt4 import QtGui, QtCore

class MainWin(QtGui.QWidget):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        lay = QtGui.QGridLayout() 
        self.setLayout(lay)
        print "case 1: ", self.sizeHint()

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

    #case 1   
    win=MainWin()
    win.show()

    #case 2
    win1 = QtGui.QWidget()
    win1.setFocusPolicy(QtCore.Qt.StrongFocus)   
    lay = QtGui.QGridLayout() 
    win1.setLayout(lay)    
    win1.show()
    print "case 2: ", win1.sizeHint()

    sys.exit(app.exec_())