2017-10-14 2 views
2

mit vielen QTextEdit nebeneinander (Ich habe eine Tabelle Teilmenge HTML in ihnen) Ich möchte nicht, dass sie eine Bildlaufleiste erhalten jeweils, wenn sie den Fensterraum überlaufen.pyQt: Scrolling QScrollArea Nicht jede QTextEdit Einzeln

Ich möchte das Fenster eine globale Bildlaufleiste haben. Was ist die beste Praxis?

hier der Code als Beispiel:

import sys 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 
from PyQt5.QtCore import QCoreApplication, QRect, Qt 

class MainWindow(QScrollArea): 
    def __init__(self): 
     super().__init__() 

     layout = QHBoxLayout(self) 

     text = '' 
     for i in range(0,1000): 
      text = '{0} {1}\n'.format(text, i) 

     for i in range(0,10): 
      textEdit = QTextEdit() 
      layout.addWidget(textEdit) 
      textEdit.setText(text) 

     self.resize(600,400) 

     self.show() 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = MainWindow() 
    sys.exit(app.exec_()) 

enter image description here

ich einen Behälter zu dem oben hinzufügen und es wird der Rollbalken los, aber dann kann ich blättern nichts an allen

import sys 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 
from PyQt5.QtCore import QCoreApplication, QRect, Qt 

class MainWindow(QScrollArea): 
    def __init__(self): 
     super().__init__() 

     container = QFrame(self) 
     container.resize(600,15000) 

     layout = QHBoxLayout(container) 

     text = '' 
     for i in range(0,1000): 
      text = '{0} {1}\n'.format(text, i) 

     for i in range(0,10): 
      textEdit = QTextEdit() 
      layout.addWidget(textEdit) 
      textEdit.setText(text) 

     self.resize(600,400) 

     self.show() 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = MainWindow() 
    sys.exit(app.exec_()) 
+0

Wenn die Textbearbeitungen unterschiedliche Inhalte haben, werden sie nicht alle die gleiche Entfernung durchlaufen. Wie könnte also eine * globale * Bildlaufleiste funktionieren? Soll es nur den Text bearbeiten, der den Tastaturfokus hat? Vielleicht wäre es besser, wenn jede Textbearbeitung nur ihre Bildlaufleiste zeigte, wenn man mit der Maus darüber schwebte. – ekhumoro

+0

Ich verwende den QtextEdit nicht als TextEdit, sondern als ein gutes Werkzeug, um benutzerdefinierte Labels durch HTML Subset zu erstellen. Also diese QTextEdit sind wie Bilder, ich muss nicht in ihnen scrollen, ich möchte die Gruppe der Labels/QTextEdit – user3755529

Antwort

1

Es sieht aus wie alles, was Sie tun müssen, ist set the vertical scroll-bar policy in den Text-Edits und dann add the container widget to the scroll-area:

class MainWindow(QScrollArea): 
    def __init__(self): 
     super().__init__() 

     container = QFrame(self) 
     container.resize(600,15000) 

     layout = QHBoxLayout(container) 

     text = '' 
     for i in range(0,1000): 
      text = '{0} {1}\n'.format(text, i) 

     for i in range(0,10): 
      textEdit = QTextEdit() 
      layout.addWidget(textEdit) 
      textEdit.setText(text) 
      textEdit.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) 

     self.setWidget(container) 

     self.resize(625,400) 

     self.show() 
+0

genau scrollen! danke ... wie kann ich das tun, damit sich die containergröße an den inhalt anpasst? – user3755529

Verwandte Themen