猿问

PyQt5 中的标签自动换行不会占用空间

我有一个应用程序,我希望自定义小部件的大小不超过其内容(即即使应用程序是全屏的,也不要拉伸按钮、标签等)。我问了这个关于如何实现这一点的问题,但是有一个问题:如果我将 QLabel 设置为自动换行,它不会占用尽可能多的空间。我仍然想占用尽可能少的空间,但只在屏幕空间的边缘换行(即占用水平空间优于垂直空间)。在 PyQt5 中有没有办法做到这一点?下面有示例代码,我想要实现它的实际代码在https://github.com/Jachdich/blechat-changeme上,如果它有用的话。


from PyQt5 import QtWidgets, QtGui, QtCore


class CustomWidget(QtWidgets.QWidget):

    def __init__(self):

        super().__init__()

        self.layout  = QtWidgets.QGridLayout()

        self.button1 = QtWidgets.QPushButton("Button A")

        self.button2 = QtWidgets.QPushButton("Button B")

        self.label1  = QtWidgets.QLabel("Long label that can span multiple columns this is actually a long message tbh and it needs word wrap really.")

        self.label1.setWordWrap(True)

        

        self.layout.addWidget(self.button1, 0, 0)

        self.layout.addWidget(self.button2, 0, 1)

        self.layout.addWidget(self.label1, 1, 0, 1, 2)

        self.setLayout(self.layout)

        self.layout.setColumnStretch(2, 1)

        self.layout.setRowStretch(2, 1)



class App(QtWidgets.QWidget):

    def __init__(self):

        super().__init__()

        self.cw = CustomWidget()

        self.layout = QtWidgets.QVBoxLayout()

        self.layout.addWidget(self.cw)


        self.setLayout(self.layout)

        self.show()


QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create("Fusion"))

app = QtWidgets.QApplication([])

win = App()

status = app.exec_()

提前致谢。


素胚勾勒不出你
浏览 194回答 1
1回答

守候你守候我

如果我正确理解您的问题,您希望这两个按钮保持原来的大小,并且在调整窗口大小时标签水平延伸。在对当前代码代码进行最少修改的情况下实现此目的的一种方法是使用self.layout.addWidget(self.label1, 1, 0, 1, 3)instead of将标签扩展到第三个扩展列self.layout.addWidget(self.label1, 1, 0, 1, 2)。
随时随地看视频慕课网APP

相关分类

Python
我要回答