Ich entwickle eine App zum Auswendiglernen von Text mit PyQt4. Ich möchte alle Wörter in Blasen zeigen, damit Sie sehen, wie lange das Wort ist. Aber wenn ich alle Blasen in meinem QScrollArea
habe, sind sie untereinander ausgerichtet. Ich möchte sie nebeneinander ausgerichtet haben, aber mit Word-Wrap.PyQt: Wrap-Around-Layout von Widgets in einer QScrollArea
Ich habe die Blasen mit einer QLabel
mit abgerundeten Grenzen arbeiten zu arbeiten. Aber jetzt, da ich die Wörter in QLabel's
habe, betrachtet PyQt sie nicht als Wörter - sondern als Widgets. PyQt bringt also ein Widget unter das andere. Ich möchte, dass die Widgets Seite an Seite ausgerichtet werden, bis sie das Ende der Zeile erreichen, und dann sollten sie zur nächsten Zeile wechseln - was bedeutet, dass die QLabel's
wie Wörter in einem Textdokument funktionieren sollte.
Hier ist mein Code so weit:
f = open(r'myFile.txt')
class Bubble(QtGui.QLabel):
def __init__(self, text):
super(Bubble, self).__init__(text)
self.word = text
self.setContentsMargins(5, 5, 5, 5)
def paintEvent(self, e):
p = QtGui.QPainter(self)
p.setRenderHint(QtGui.QPainter.Antialiasing,True)
p.drawRoundedRect(0,0,self.width()-1,self.height()-1,5,5)
super(Bubble, self).paintEvent(e)
class MainWindow(QtGui.QMainWindow):
def __init__(self, text, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.MainArea = QtGui.QScrollArea
self.widget = QtGui.QWidget()
vbox = QtGui.QVBoxLayout()
self.words = []
for t in re.findall(r'\b\w+\b', text):
label = Bubble(t)
label.setFont(QtGui.QFont('SblHebrew', 18))
label.setFixedWidth(label.sizeHint().width())
self.words.append(label)
vbox.addWidget(label)
self.widget.setLayout(vbox)
self.MainArea.setWidget(self.widget)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
myWindow = MainWindow(f.read(), None)
myWindow.show()
sys.exit(app.exec_())
Als ich das laufen erhalte ich:
Aber ich würde die Worte gefallen (die Qlabel's
die Wörter) neben sein miteinander, nicht untereinander, so (photoshopped):
Ich habe viel Forschung betrieben, aber keine Antworten helfen mir, die Widgets nebeneinander auszurichten.
Warum aren nimmst du html? – ekhumoro
erklären Sie Ihre Frage bitte – eyllanesc
@ekhumoro, ich schreibe eine Computer-App. Ist HTML nicht für Webseiten? Außerdem lerne ich immer noch HTML. –