python - 是否可以在不修复的情况下为 Widget 设置宽度?
问题描述
我正在尝试在 PyQt5 中设置 QScrollArea 的宽度,但我发现的唯一一件事是通过
scroll.setFixedWidth(360)
功能。
问题是当我将滚动条区域放在 QSplitter
self.splitter2 = QSplitter(Qt.Horizontal)
self.splitter2.addWidget(scroll)
我不能再用鼠标调整滚动条区域的宽度了。
我想做的是设置滚动条区域的宽度(例如 100),然后当我单击并拖动 QSplitter 的中间线时能够对其进行修改。现在它是一个(设置滚动条区域的宽度)或另一个(用鼠标修改宽度) - 但不能同时两者。
这是一个最小的例子:
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class Viewer(QMainWindow):
def __init__(self, parent=None):
super(Viewer, self).__init__()
self.parent = parent
self.centralWidget= QWidget()
self.setCentralWidget(self.centralWidget)
self.mainHBOX = QHBoxLayout()
self.setFixedWidth(200)
self.setFixedHeight(200)
label1 = QLabel('blablabalblablabalblablabalblablabalblablabalblablabalblablabalblablabalblablabal')
label2 = QLabel('blablabal again')
scroll = QScrollArea()
scroll.setFixedWidth(100)
scroll.setWidget(label1)
scroll.setWidgetResizable(True)
self.splitter2 = QSplitter(Qt.Horizontal)
self.splitter2.addWidget(scroll)
self.splitter2.addWidget(label2)
self.mainHBOX.addWidget(self.splitter2)
self.centralWidget.setLayout(self.mainHBOX)
def main():
app = QApplication(sys.argv)
ex = Viewer(app)
ex.setWindowTitle('window')
# ex.showMaximized()
ex.show()
sys.exit(app.exec_( ))
if __name__ == '__main__':
main()
解决方案
您应该设置拆分器句柄的初始位置,而不是设置其子小部件的宽度。这可以使用QSplitter.setSizes来完成:
leftwidth = 100
self.splitter2.setSizes([leftwidth, self.width() - leftwidth])
但请注意,拆分器不允许将其句柄移动到小于子小部件最小宽度的位置。滚动区域的默认最小宽度为 100。因此,在上面的示例中,leftwidth = 50
除非您相应地明确重置滚动区域的最小宽度,否则设置将无法正常工作。
推荐阅读
- c# - 清除堆栈变量内存
- android - 如何在九个补丁图像的内容区域内放置文本?
- javascript - 将 Deferred Helper 转换为 TypeScript 类
- swift - SwiftUI - 获取用户坐标以传递 API 调用
- r - 有没有办法使用 K-means 使用斜率而不是值来聚类 r 中的曲线?
- java - Antlr4:获取令牌的有序列表?
- python - 重新生成一个随机索引,直到索引元素在python中满足n次条件
- reactjs - 如何在 switch 语句中使用带有样式组件的道具
- .htaccess - TYPO3 9.5.x 允许在 URL 中使用大写字母
- .net - Dapper - 多映射 API 确保您设置 splitOn