0

スタイルシートを含む多くのウィジェットを含むアプリケーションがありました, しかし, インターフェイスにレイアウトを追加しませんでした. 中央のウィジェットも含まれていませんでしたが, アプリケーションは問題なく実行されていました.

ただし、アプリケーションのサイズを変更 (縮小) しようとすると、もちろんウィジェットは拡大縮小されません。

私は少し調査しました(私の問題に関連するものが他に見つからなかったため)、Qtドキュメント、スタイルシートリファレンスでこれを見つけました:

「実際に描画される画像は、QIcon と同じアルゴリズムを使用して決定されます (つまり、画像は決して拡大されず、必要に応じて常に縮小されます。」

ウィンドウでスタイルシートを縮小するにはどうすればよいですか? (スタイルシートに背景画像がある場合)


たとえば、スタイルシート付きのボタンがあります:

btn = QtGui.QPushButton(self)
btn.move(0, 0)
btn.setObjectName('btn)
btn.setStyleSheet("#btn {background-image: url(':/images/somepicture.png'); border: none; }")

このボタンをウィンドウで縮小するにはどうすればよいですか?レイアウトなしでこれを達成できますか? そうでない場合、どうすればレイアウトでそれを行うことができますか? (あまり制限しないでください)

4

1 に答える 1

1

ボタンを中央のウィジェットとして に追加する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_()

objectNameCSS を特定のウィジェットに割り当てるために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_()

ただし、このようにウィジェットを完全に配置すると、親ウィジェットに合わせて自動スケーリングする機能が失われます。ウィンドウ内の要素の周りにパディング/スペースが必要な場合は、 を見てください.setContentsMarginsQLayoutsたとえばl.setContentsMargins(50,50,50,50)、ボタンの周りに 50px のマージンを置きます。

于 2016-05-22T10:58:03.893 に答える