簡體   English   中英

PyQt:如何在縮放模式下設置樣式表內容?

[英]PyQt: How can i set stylesheet contents on scaled mode?

我有一個應用程序,其中包含許多帶有樣式表的小部件,但是,我沒有向界面添加任何布局,也沒有包含中央小部件,但是該應用程序運行時沒有任何問題。

但是,每當我嘗試調整應用程序大小(按比例縮小)時,小部件都不會按比例縮放。

我做了一點研究(因為我找不到與我的問題有關的其他東西),並且在Qt文檔的樣式表參考中找到了這一點:

“繪制的實際圖像是使用與QIcon相同的算法確定的(即,圖像從未按比例放大,但在必要時始終按比例縮小”。)

如何使樣式表隨窗口縮小? (如果樣式表上有背景圖片)


例如我有樣式表的按鈕:

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

我怎樣才能使該按鈕隨窗口縮小?我可以在沒有布局的情況下實現此功能嗎? 如果沒有,我該如何使用布局? (沒有太多限制)

如果將按鈕作為中央小部件添加到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_()

請注意,您無需設置id( objectName )即可將CSS分配給特定的小部件,只需通過.setStyleSheet()傳入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的邊距。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM