2016-04-17 23 views
0

私はpyQtを初めて使いました。レイアウトやウィジェットの仕組みをちょっと説明しました。私は、新しいウィジェットを作成し、このウィジェットにレイアウト(たとえばGridLayout)を追加してから、このレイアウトをメインウィンドウに設定する必要があると私は理解しています。以下、私が望んでいたように動作していないと私はここから行くことがどこか分からないされていますレイアウトをウィジェットに追加してからメインウィジェットにウィジェットを追加する方法

self.grid_widget = QtGui.QWidget(self) 
self.grid_widget.setGeometry(120,10,500,235) 
gridPalette = self.grid_widget.palette() 
gridPalette.setColor(self.grid_widget.backgroundRole(), QtGui.QColor('white')) 
self.grid_widget.setPalette(gridPalette) 

grid = QtGui.QGridLayout() 
self.grid_widget.setLayout(grid)    
self.setLayout(self.grid_widget) 

私は基本的に(私はジオメトリを設定した)特定の場所にあるようにウィジェットを必要としています。グリッドをウィンドウに追加するだけですが、グリッドはウィンドウ全体をカバーし、どこに配置したいのかはわかりません。

誰かがこのパイプラインを説明してくれれば非常に便利です! PyQtはで

答えて

0

あなたは通常、 "メインウィンドウ" で始まります。私は通常その目的のためにサブクラスをQtGui.QMainWindowにします。そのクラスからインスタンス化されたオブジェクトは私の「メインウィンドウ」です。 次へ私はQtGui.QWidgetのサブクラスを作成します。私はそのクラスからオブジェクトを作り、それを私の「メインウィジェット」と呼んで、それを「メインウィンドウ」の中心に置きます。その "メインウィジェット"にレイアウトを割り当て、それに子ウィジェットを追加することができます。レイアウトによって、子ウィジェットが適切に配置されていることが確認されます。 だから、多少このようなものです:

from PyQt4 import QtGui 
from PyQt4 import QtCore 
import sys 

class CustomMainWindow(QtGui.QMainWindow): 

    def __init__(self): 
     super(CustomMainWindow, self).__init__() 
     self.setGeometry(300, 300, 800, 800) 
     self.setWindowTitle("my first window") 

     self.mainWidget = CustomMainWidget(self) 
     self.setCentralWidget(self.mainWidget) 
     ... 
     self.show() 

''' End Class ''' 

class CustomMainWidget(QtGui.QWidget): 

    def __init__(self, parent): 
     super(CustomMainWidget, self).__init__(parent) 
     self.mainLayout = None 
     self.initLayout() 
     self.putSomeWidgetInTheLayout() 
     ... 
    def initLayout(self): 
     # When you use a layout, you do not need to pass a parent when 
     # constructing the child widgets. The layout will automatically 
     # reparent the widgets (using QWidget::setParent()) so that they 
     # are children of the widget on which the layout is installed. 
     # Widgets can only have other widgets as parent, not layouts. 
     self.mainLayout = QtGui.QGridLayout() 
     self.setLayout(self.mainLayout) 

    def putSomeWidgetInTheLayout(self): 
     # Notice that I don't assign a parent to 'lbl1'! 
     lbl1 = QtGui.QLabel("My label") 
     setCustomSize(lbl1, 160, 40) 
     self.mainLayout.addWidget(lbl1, *(0,0)) 
     # -> I just added the label widget to the layout 
     # of the main (central) widget. The label widget 
     # had no parent widget to begin with. But by adding 
     # it to the layout, the layout will 'reparent' the 
     # label widget. So from now on, the label widget is 
     # a child of the 'main (central) widget'. 

     lbl2 = QtGui.QLabel("My second label") 
     setCustomSize(lbl2, 160, 40) 
     self.mainLayout.addWidget(lbl2, *(0,1)) 

''' End Class ''' 

def setCustomSize(x, width, height): 
    sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) 
    sizePolicy.setHorizontalStretch(0) 
    sizePolicy.setVerticalStretch(0) 
    sizePolicy.setHeightForWidth(x.sizePolicy().hasHeightForWidth()) 
    x.setSizePolicy(sizePolicy) 
    x.setMinimumSize(QtCore.QSize(width, height)) 
    x.setMaximumSize(QtCore.QSize(width, height)) 

if __name__== '__main__': 
    app = QtGui.QApplication(sys.argv) 
    myWindow = CustomMainWindow() 
    sys.exit(app.exec_()) 

私はこれが便利だった願っています。 ご不明な点がございましたら、お手伝いいたします。

関連する問題