2017-11-17 37 views
0

私はユーザー入力に基づいて生成されるリストを持っています。PyQt5 - QMessageBoxにスクロールバーを追加するには

このリストをQMessageBoxに表示しようとしています。しかし、私はこのリストの長さを知る方法がありません。リストは長いかもしれない。

したがって、QMessageBoxにスクロールバーを追加する必要があります。

興味深いことに、私はどこにでも見えましたが、私はこれに対する解決策を見出していません。

以下は、ユーザーの入力がなくても、「最小限で完全で検証可能な例」になることを希望します。私は例としてリストを作成しました。

私は何かアドバイスをいただきありがとうございます。 QLabelにテキストを表示する担当のウィジェットは、ソリューションがQScrollAreaを追加することですので、あなたが直接、スクロールバーを追加することはできません

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_()) 
+0

私はQMessageBoxはそれを可能にするのに十分に柔軟であるとは思いません。 QScrollAreaを含むより一般的なQDialogを使用する必要があります。 – BrenBarn

+0

@BrenBarn大変ありがとうございます。はい、あなたは絶対に正しいです。 –

答えて

1

最小に設定するスタイルシートに使用されますので、サイズが不十分であり値。

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

+0

ありがとう、とても感謝しています。 –

関連する問題