gpt4 book ai didi

python - PyQt5 - 如何向 QMessageBox 添加滚动条

转载 作者:行者123 更新时间:2023-12-01 18:05:04 25 4
gpt4 key购买 nike

我有一个根据用户输入生成的列表。

我正在尝试在 QMessageBox 中显示此列表。但是,我无法知道这个列表的长度。这个 list 可能很长。

因此,我需要向 QMessageBox 添加滚动条。

有趣的是,我到处寻找,但没有找到任何解决方案。

下面是我希望成为一个“最小、完整且可验证的示例”,当然没有用户输入;我刚刚创建了一个列表作为示例。

我很感激任何建议。

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class W(QWidget):

def __init__(self):
super().__init__()

self.initUi()

def initUi(self):
self.btn = QPushButton('Show Message', self)
self.btn.setGeometry(10, 10, 100, 100)
self.btn.clicked.connect(self.buttonClicked)
self.lst = list(range(2000))
self.show()


def buttonClicked(self):
result = QMessageBox(self)
result.setText('%s' % self.lst)
result.exec_()

if __name__ == "__main__":
app = QApplication(sys.argv)
gui = W()
sys.exit(app.exec_())

最佳答案

您不能直接添加滚动条,因为负责显示文本的小部件是QLabel。解决方案是添加一个QScrollArea。大小可能不够,因此必须使用样式表来设置最小值。

class ScrollMessageBox(QMessageBox):
def __init__(self, l, *args, **kwargs):
QMessageBox.__init__(self, *args, **kwargs)
scroll = QScrollArea(self)
scroll.setWidgetResizable(True)
self.content = QWidget()
scroll.setWidget(self.content)
lay = QVBoxLayout(self.content)
for item in l:
lay.addWidget(QLabel(item, self))
self.layout().addWidget(scroll, 0, 0, 1, self.layout().columnCount())
self.setStyleSheet("QScrollArea{min-width:300 px; min-height: 400px}")

class W(QWidget):
def __init__(self):
super().__init__()
self.btn = QPushButton('Show Message', self)
self.btn.setGeometry(10, 10, 100, 100)
self.btn.clicked.connect(self.buttonClicked)
self.lst = [str(i) for i in range(2000)]
self.show()


def buttonClicked(self):
result = ScrollMessageBox(self.lst, None)
result.exec_()

if __name__ == "__main__":
app = QApplication(sys.argv)
gui = W()
sys.exit(app.exec_())

输出:

enter image description here

关于python - PyQt5 - 如何向 QMessageBox 添加滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47345776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com