Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将标签fontsize与PyQt中的布局同步_Python_Python 3.x_Pyqt_Pyqt4 - Fatal编程技术网

Python 将标签fontsize与PyQt中的布局同步

Python 将标签fontsize与PyQt中的布局同步,python,python-3.x,pyqt,pyqt4,Python,Python 3.x,Pyqt,Pyqt4,通过信号/插槽更改标签字体大小以匹配其所包含的布局大小的具体方法是什么?下面是一个解决方案,用于QLabel,源自此处发布的解决方案: 这包括重新实现resizeEvent方法,其中根据contentRect的大小更新QLabel的字体大小。请注意,Qlabel的sizePolicy必须设置为Ignored,才能正常工作 import sys from PyQt4 import QtGui class myQLabel(QtGui.QLabel): def __init__(

通过信号/插槽更改标签字体大小以匹配其所包含的布局大小的具体方法是什么?

下面是一个解决方案,用于
QLabel
,源自此处发布的解决方案:

这包括重新实现
resizeEvent
方法,其中根据
contentRect
的大小更新
QLabel
的字体大小。请注意,Qlabel的
sizePolicy
必须设置为
Ignored
,才能正常工作

import sys
from PyQt4 import QtGui     

class myQLabel(QtGui.QLabel):
    def __init__(self, *args, **kargs):
        super(myQLabel, self).__init__(*args, **kargs)

        self.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored,
                                             QtGui.QSizePolicy.Ignored))  

        self.setMinSize(14)

    def setMinSize(self, minfs):        

        f = self.font()
        f.setPixelSize(minfs)
        br = QtGui.QFontMetrics(f).boundingRect(self.text())

        self.setMinimumSize(br.width(), br.height())

    def resizeEvent(self, event):
        super(myQLabel, self).resizeEvent(event)

        if not self.text():
            return

        #--- fetch current parameters ----

        f = self.font()
        cr = self.contentsRect()

        #--- find the font size that fits the contentsRect ---

        fs = 1                    
        while True:

            f.setPixelSize(fs)
            br =  QtGui.QFontMetrics(f).boundingRect(self.text())

            if br.height() <= cr.height() and br.width() <= cr.width():
                fs += 1
            else:
                f.setPixelSize(max(fs - 1, 1)) # backtrack
                break  

        #--- update font size ---

        self.setFont(f)     


class myApplication(QtGui.QWidget):
    def __init__(self, parent=None):
        super(myApplication, self).__init__(parent)

        #---- Prepare a Layout ----

        grid = QtGui.QGridLayout()  

        for i in range(3):
            grid.addWidget(myQLabel('some text'), i, 0)  
            grid.setRowStretch(i, i+1)
            grid.setRowMinimumHeight(i, 25)

        self.setLayout(grid)
        self.resize(500, 300)


if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)

    instance = myApplication()  
    instance.show()    

    sys.exit(app.exec_())

下面是一个针对
QLabel
的解决方案,它是从此处发布的解决方案派生而来的:

这包括重新实现
resizeEvent
方法,其中根据
contentRect
的大小更新
QLabel
的字体大小。请注意,Qlabel的
sizePolicy
必须设置为
Ignored
,才能正常工作

import sys
from PyQt4 import QtGui     

class myQLabel(QtGui.QLabel):
    def __init__(self, *args, **kargs):
        super(myQLabel, self).__init__(*args, **kargs)

        self.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored,
                                             QtGui.QSizePolicy.Ignored))  

        self.setMinSize(14)

    def setMinSize(self, minfs):        

        f = self.font()
        f.setPixelSize(minfs)
        br = QtGui.QFontMetrics(f).boundingRect(self.text())

        self.setMinimumSize(br.width(), br.height())

    def resizeEvent(self, event):
        super(myQLabel, self).resizeEvent(event)

        if not self.text():
            return

        #--- fetch current parameters ----

        f = self.font()
        cr = self.contentsRect()

        #--- find the font size that fits the contentsRect ---

        fs = 1                    
        while True:

            f.setPixelSize(fs)
            br =  QtGui.QFontMetrics(f).boundingRect(self.text())

            if br.height() <= cr.height() and br.width() <= cr.width():
                fs += 1
            else:
                f.setPixelSize(max(fs - 1, 1)) # backtrack
                break  

        #--- update font size ---

        self.setFont(f)     


class myApplication(QtGui.QWidget):
    def __init__(self, parent=None):
        super(myApplication, self).__init__(parent)

        #---- Prepare a Layout ----

        grid = QtGui.QGridLayout()  

        for i in range(3):
            grid.addWidget(myQLabel('some text'), i, 0)  
            grid.setRowStretch(i, i+1)
            grid.setRowMinimumHeight(i, 25)

        self.setLayout(grid)
        self.resize(500, 300)


if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)

    instance = myApplication()  
    instance.show()    

    sys.exit(app.exec_())

如何为标签指定初始尺寸?忽略大小策略后是否可能?嗯,标签的初始大小将主要由应用程序的布局端决定。但是我可以看到,在标签上设置一个最小的大小是很有用的,这样它就不会因为拉伸UI的其他元素而崩溃。请参阅更新的示例。如何为标签指定初始大小?忽略大小策略后是否可能?嗯,标签的初始大小将主要由应用程序的布局端决定。但是我可以看到,在标签上设置一个最小的大小是很有用的,这样它就不会因为拉伸UI的其他元素而崩溃。请参见更新的示例。