我想創建一個高度應該等于子 QLabel 高度的視窗,QLabel 可以設定為任何大小的文本,并且 setWrap 為 True。這是我當前的代碼:
class TextWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setFixedWidth(230)
self.centralwidget = QWidget(self)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout = QHBoxLayout(self.centralwidget)
self.horizontalLayout.setSizeConstraint(QLayout.SizeConstraint.SetMinimumSize)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setSpacing(0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QLabel(self.centralwidget)
self.label.setWordWrap(True)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.setCentralWidget(self.centralwidget)
self.label.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur non urna nisl. Integer venenatis aliquet faucibus. Nam tristique massa a vestibulum congue. Vivamus nisi felis, volutpat vitae neque quis, pharetra tristique massa. Duis tincidunt et nulla a hendrerit. Vestibulum in molestie lectus.")
實際行為:


文字多就截斷,如果不夠多,那么視窗邊緣和文字之間有巨大的邊距,我希望視窗高度能包裹文字,也就是視窗的高度需要等于文本的大小。如何才能做到這一點?
uj5u.com熱心網友回復:
獲取QLabel使用sizeHint()方法的大小提示,然后在調整視窗大小時使用結果。
例如:
text = "Some very long text that will possible need to be wrapped and take up more than one line."
value = 3 # <--- raise or lower value to see adjustments
class Window(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent=parent)
self.central = QWidget()
self.layout = QVBoxLayout(self.central)
self.setCentralWidget(self.central)
self.label = QLabel(text=text * value)
self.layout.addWidget(self.label)
self.label.setWordWrap(True)
self.resize(self.label.sizeHint())
uj5u.com熱心網友回復:
布局檔案的布局問題部分對此進行了說明:
在標簽小部件中使用富文本可能會給其父小部件的布局帶來一些問題。當標簽被自動換行時,Qt 的布局管理器處理富文本的方式會出現問題”。
請注意,根據經驗,您永遠不應依賴使用自動換行文本的標簽的大小提示。這與文本布局存在的許多問題有關,例如意外的字體行為、系統字體縮放、高 DPI 設定。實際上,默認行為不考慮自動換行標簽的可能大小提示是一件好事,否則可能會出現嚴重的性能問題,尤其是在調整大小時。
事實是,自動換行的文本應始終顯示在滾動區域中(使用 QTextEdit 或放置在 QScrollArea 內的 QLabel);默認 API 無法知道可以顯示某些文本的無限可能性,并且應始終以最佳性能為目標。
問題是由于無法知道可以包裝其內容的標簽的“最佳”尺寸提示,并且布局管理器應始終嘗試盡可能快地回應,否則您將面臨遞回風險或不必要的開銷,即使是簡單的標簽。
如果您完全確定標簽的固定寬度,您應該明確設定它:
self.label.setFixedWidth(230)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/527356.html
標籤:qtpyqt
下一篇:嘗試制作暗光模式切換器
