あなたは通常、 "メインウィンドウ" で始まります。私は通常その目的のためにサブクラスを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_())
私はこれが便利だった願っています。 ご不明な点がございましたら、お手伝いいたします。