ボタンを中央のウィジェットとしてQMainWindow
に追加すると、そのサイズは使用可能なスペースに合わせて自動的に調整されます。しかし、ボタン画像を拡大縮小するには、画像をborder-image
スタイルシートプロパティ(ちょっと変わったもの)として設定する必要があります。 PyQt4のための作業例:あなたは、単に.setStyleSheet()
を経由してCSSルールに渡すことができ、特定のウィジェットにCSSを割り当てるには、ID(objectName
)を設定する必要はありません
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_()
注意。
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 COORDS)が取られています。
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_()
しかし、絶対に次のようにウィジェットを配置することはあなたにそれが親ウィジェットに合わせて、自動スケールする能力を失います。ウィンドウ内の要素の周りにいくつかのパディング/スペーシングが必要な場合はQLayouts
の.setContentsMargins
を見てください。 l.setContentsMargins(50,50,50,50)
はボタンの周りに50ピクセルの余白を入れます。
現在の表示方法のスクリーンショットを含めることはできますか? 「それには中央のウィジェットは含まれていない」というのは意味をなさない。あるいは 'QMainWindow'を全く持っていませんでしたか? – mfitzp
それはうまく動く、私はそれも実行可能に凍結され、働いた、私は自分自身を中央のウィジェットを割り当てていないはい、それはQMainWindowを持って、私はまた私はレイアウトを追加しようとしたときに、それは警告を与えた:QLayoutを追加しようと " "to Window" "、これは既にレイアウトを持っています。 @mfitzp – ShellRox