ボタンを中央のウィジェットとして に追加するQMainWindow
と、使用可能なスペースに合わせてサイズが自動的に調整されます。ただし、ボタンの画像を拡大縮小するには、画像をborder-image
スタイルシートのプロパティとして設定する必要があります (少し奇妙です)。PyQt4 の実際の例:
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
btn = QtGui.QPushButton(self)
btn.setStyleSheet("border-image: url('somepicture.png');") # Scaled
#btn.setStyleSheet("background-image: url('somepicture.png');") # Not scaled
self.setCentralWidget(btn)
self.show()
app = QtGui.QApplication([])
window = MainWindow()
app.exec_()
objectName
CSS を特定のウィジェットに割り当てるためにid ( ) を設定する必要はないことに注意してください。単純に を介して CSS ルールを渡すことができます.setStyleSheet()
。
QMainWindow
ドッキング ウィジェットとツールバーに対応する複雑なレイアウト システムが既にあるため、レイアウトを設定することはできません。したがって、レイアウトを使用して複数のウィジェットをウィンドウに追加する場合は、コンテナー ウィジェットを使用してそれを保持する必要があります。次の実際の例は、これを示しています。
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
w = QtGui.QWidget() # container widget
l = QtGui.QVBoxLayout() # your layout
w.setLayout(l) # set the layout on your container widget
btn = QtGui.QPushButton(self)
btn.setStyleSheet("border-image: url('somepicture.png');")
label = QtGui.QLabel('Hello!')
l.addWidget(btn) # add your widget to the layout
l.addWidget(label) # add the label to the layout
self.setCentralWidget(w) # add the container widget to the QMainWindow
self.show()
app = QtGui.QApplication([])
window = MainWindow()
app.exec_()
ウィジェットをレイアウトに追加する (サイズ/位置を制御する) のではなく、ウィジェットを絶対に配置できるようにする場合は、作成時に親要素を渡すことができます (x、y 座標が取得される基準):
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
w = QtGui.QWidget() # container widget
btn = QtGui.QPushButton(w)
btn.move(100,100)
btn.setStyleSheet("border-image: url('somepicture.png');")
self.setCentralWidget(w) # add the container widget to the QMainWindow
self.show()
app = QtGui.QApplication([])
window = MainWindow()
app.exec_()
ただし、このようにウィジェットを完全に配置すると、親ウィジェットに合わせて自動スケーリングする機能が失われます。ウィンドウ内の要素の周りにパディング/スペースが必要な場合は、 を見てください.setContentsMargins
。QLayouts
たとえばl.setContentsMargins(50,50,50,50)
、ボタンの周りに 50px のマージンを置きます。