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 に答える