[英]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.