PYQT 自动resize 随着内容自动变化长度

下面的 代码,

可以让 label comboBox 等QWidget自动resize、label comboBox 等QWidget随着内容自动变化长度

label comboBox 等QWidget 自动对齐等,截图如下:





代码如下

# -*- coding: utf-8 -*-


from PyQt4 import QtCore, QtGui
import sys
from mainwin import Ui_MainWindow

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)



from PyQt4.QtCore import Qt
from PyQt4.QtGui import QApplication,\
                        QLabel,\
                        QFontMetrics,\
                        QPainter

class MyLabel(QLabel):
    def paintEvent( self, event ):
        painter = QPainter(self)

        metrics = QFontMetrics(self.font())
        elided  = metrics.elidedText(self.text(), Qt.ElideRight, self.width())

        painter.drawText(self.rect(), self.alignment(), elided)


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    mainwin = QtGui.QMainWindow()
    #ui = Ui_MainWindow()
    #ui.setupUi(mainwin)

    #centralwidget = QtGui.QWidget(mainwin)


    grid = QtGui.QGridLayout()

    label = QtGui.QLabel()
    txt = "234234"
    metrics = QFontMetrics(label.font())
    w = metrics.width(txt)
    label.setGeometry(QtCore.QRect(20, 20, w, 80))
    label.setObjectName(_fromUtf8("label_3"))
    label.setText(_translate("MainWindow", txt, None))

    grid.addWidget(label, 0, 0)


    l = ['123' , '3451111111111111', '1111111111', '0000000000000', '123']
    comboBox = QtGui.QComboBox()
    txt = (max(l, key=len))
    metrics = QFontMetrics(comboBox.font())
    w = metrics.width(txt)
    comboBox.setGeometry(QtCore.QRect(80, 5, 20, 20))
    comboBox.setMinimumWidth(w)

    comboBox.setObjectName(_fromUtf8("comboBox_2"))
    comboBox.addItems(l)
    comboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)

    grid.addWidget(comboBox, 0, 1)


    label1 = QtGui.QLabel()
    txt = "2342341111111111111111"
    metrics = QFontMetrics(label1.font())
    w = metrics.width(txt)
    label1.setGeometry(QtCore.QRect(20, 20, w, 80))
    label1.setObjectName(_fromUtf8("label_3"))
    label1.setText(_translate("MainWindow", txt, None))

    grid.addWidget(label1, 1, 0)


    l = ['123' , '3451', '111', '000', '123']
    comboBox1 = QtGui.QComboBox()
    txt = (max(l, key=len))
    metrics = QFontMetrics(comboBox1.font())
    w = metrics.width(txt)
    comboBox1.setGeometry(QtCore.QRect(80, 5, 20, 20))
    comboBox1.setMinimumWidth(w)

    comboBox1.setObjectName(_fromUtf8("comboBox_2"))
    comboBox1.addItems(l)
    comboBox1.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)

    grid.addWidget(comboBox1, 1, 1)

    l = ['123', '3451', '111', '000', '123']
    comboBox2 = QtGui.QComboBox()
    txt = (max(l, key=len))
    metrics = QFontMetrics(comboBox2.font())
    w = metrics.width(txt)
    comboBox2.setGeometry(QtCore.QRect(80, 5, 20, 20))
    comboBox2.setMinimumWidth(w)

    comboBox2.setObjectName(_fromUtf8("comboBox_2"))
    comboBox2.addItems(l)
    comboBox2.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
    grid.addWidget(comboBox2, 2, 1)

    #centralwidget = QtGui.QWidget()
    #mainwin.setCentralWidget(centralwidget)

    #tabWidget = QtGui.QTabWidget(centralwidget)
    tabWidget = QtGui.QTabWidget()
    tabWidget.setGeometry(QtCore.QRect(20, 20, 500, 500))
    tabWidget.setObjectName(_fromUtf8("tabWidget"))
    tab = QtGui.QWidget()
    tab.setObjectName(_fromUtf8("tab"))
    tabWidget.addTab(tab, _fromUtf8(""))
    tab_2 = QtGui.QWidget()
    tab_2.setObjectName(_fromUtf8("tab_2"))
    tabWidget.addTab(tab_2, _fromUtf8(""))

    tabWidget.setTabText(tabWidget.indexOf(tab), _translate("MainWindow", "Tab 1", None))
    tabWidget.setTabText(tabWidget.indexOf(tab_2), _translate("MainWindow", "Tab 2", None))

    tabWidget.setDocumentMode(True)

    #tabcentralwidget = QtGui.QWidget(centralwidget)
    #tabWidget.setCentralWidget(tabcentralwidget)
    #tabcentralwidget.setLayout(grid)

    tab.setLayout(grid)

    mainwin.setCentralWidget(tabWidget)

    mainwin.show()
    app.exec_()



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值