如何在缩放模式下设置样式表内容?

2024-04-24 07:34:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个应用程序,其中包含了很多带有样式表的小部件,但是,我没有向界面添加任何布局,也没有包含中心小部件,但应用程序运行时没有任何问题。在

然而,每当我试图调整应用程序的大小(缩小),小部件当然不会伸缩。在

我做了一点调查(因为我找不到任何与我的问题相关的东西),我在Qt文档中找到了这个,样式表参考:

"The actual image that is drawn is determined using the same algorithm as QIcon (i.e) the image is never scaled up but always scaled down if necessary."

如何使样式表缩小窗口?(如果样式表打开了背景图像)


例如,我有带有样式表的按钮:

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

我如何使这个按钮缩小窗口,我可以实现这个没有布局吗?如果不是的话,我该如何处理布局?(没有太多限制)


Tags: the文档image程序运行应用程序界面is部件
1条回答
网友
1楼 · 发布于 2024-04-24 07:34:11

如果您将按钮作为中心小部件添加到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规则。在

您不能在QMainWindow上设置布局,因为它已经有一个复杂的布局系统来容纳停靠小部件和工具栏。因此,如果要使用布局向窗口添加多个小部件,则需要使用容器小部件来保存它。下面的工作示例演示了这一点:

^{pr2}$

如果您希望能够绝对定位小部件,而不是将它们添加到布局(这将控制它们的大小/位置),则可以在创建父元素时传递父元素(相对于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_()

但是,像这样定位一个小部件会失去自动调整它以适应父部件的能力。如果您只想在窗口中的元素周围添加一些填充/间距,请查看QLayouts上的.setContentsMargins,例如,l.setContentsMargins(50,50,50,50)会在按钮周围加上50像素的边距。在

相关问题 更多 >