我正在使用PyQt4开发一款记忆文本的应用程序。我想将所有单词显示在气泡中,以便您可以看到单词的长度。但当我将所有气泡放入我的
我已经成功使用具有圆角边框的
以下是我目前的代码:
当我运行这个程序时,会出现以下结果:但是我希望单词(包含单词的Qlabel)彼此相邻,而不是像这样(经过Photoshop编辑后): 我已经进行了很多研究,但没有答案能够帮助我将小部件对齐在一起。
QScrollArea
中时,它们会一个接一个地排列。我希望它们能够并排对齐,但同时也要自动换行。我已经成功使用具有圆角边框的
QLabel
来实现气泡效果。但是,由于我将单词放在了QLabel
中,PyQt不再将它们视为单词,而是视为小部件。因此,PyQt将一个小部件放在另一个小部件下面。我希望这些小部件能够并排对齐,直到达到行尾,然后它们应该自动换行 - 这意味着QLabel
应该像文本文档中的单词一样。以下是我目前的代码:
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_())
当我运行这个程序时,会出现以下结果:但是我希望单词(包含单词的Qlabel)彼此相邻,而不是像这样(经过Photoshop编辑后): 我已经进行了很多研究,但没有答案能够帮助我将小部件对齐在一起。