0

如果我在类级别使用 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_()
4

1 回答 1

1

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_())
于 2013-07-11T07:36:46.450 回答