Найти - Пользователи
Полная версия: PyQt4, QScrollArea с динамичной QLabel() - исчезает текст
Начало » GUI » PyQt4, QScrollArea с динамичной QLabel() - исчезает текст
1
Guljaca
При смене значения текста в self.txt в self.label.setText(self.txt) текст, находящийся в self.viewport, попросту пропадает. Почему не отображается текст? Как исправить?

Рабочий код:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys, functools
app = QApplication(sys.argv)
top = Qt.AlignTop
right = Qt.AlignRight
left = Qt.AlignLeft
center = Qt.AlignCenter
bottom = Qt.AlignBottom
class Window(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setMinimumSize(500,500)
        self.setMaximumSize(500,500)
        self.label = QLabel()
        self.label.setAlignment(top)
        self.hbox = QHBoxLayout()
        self.hbox2 = QHBoxLayout()
        self.button = QPushButton()
        self.button.setMaximumSize(50,50)
        self.button.clicked.connect(functools.partial(self.change, 'none'))
        self.txt = 'test '*100
        self.test()
    def test(self):
        print 1
        self.label.setText(self.txt)
        self.label.setWordWrap(True)
        self.hbox = QHBoxLayout()
        self.hbox.addWidget(self.label)
        self.hbox2.addWidget(self.button)
        self.scroll = QScrollArea(self)
        self.scroll.setGeometry(10,10,300,300)
        self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.viewport = QWidget()
        self.viewport.setGeometry(10,10,280,590)
        self.viewport.setLayout(self.hbox)
        self.scroll.setWidget(self.viewport)
        self.setLayout(self.hbox2)
    def change(self,x):
        print 2
        self.txt = '+ *100'
        self.test()
window = Window()
window.show()
sys.exit(app.exec_())
reclosedev
Слишком много пересоздается при клике на кнопку, возможно виджет удаляется или еще что-то, лень разбираться. Если задача добавить в QLabel текст, то хватило бы:
    def change(self,x):
        print 2
        self.txt += 'test '*100
        self.label.setText(self.txt)
без вызова test()
Guljaca
Помогло, но полоса прокрутки работает только, когда она находится вблизи рамки. Стоит ее слегка отодвинуть - намертво блокируется.
Это проблема возникает при добавлении второго label с текстом. Как это исправить?
Проще, конечно, другим окном вывести (там статичный текст), но хотелось хотя бы причину узнать.

Добавленные строки закомменчены
class Window(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setMinimumSize(500,500)
        self.setMaximumSize(700,500)
        self.label = QLabel()
        self.label.setAlignment(top)
        #self.label2 = QLabel()
        #self.label2.setAlignment(top)
        self.hbox = QHBoxLayout()
        #self.hbox2 = QHBoxLayout()
        self.button = QPushButton()
        self.button.setMaximumSize(50,50)
        self.button.clicked.connect(functools.partial(self.change, 'none'))
        self.txt = 'test '*100
        self.label.setText(self.txt)
        self.label.setWordWrap(True)
        #self.label2.setText('ssss')
        self.hbox = QHBoxLayout()
        self.hbox.addWidget(self.label)
        self.hbox2.addWidget(self.button)
        #self.hbox2.addWidget(self.label2)
        self.scroll = QScrollArea(self)
        self.scroll.setGeometry(10,10,300,300)
        self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.viewport = QWidget()
        self.viewport.setGeometry(10,10,280,590)
        self.viewport.setLayout(self.hbox)
        self.scroll.setWidget(self.viewport)
        self.setLayout(self.hbox2)
    def change(self,x):
        self.txt = 'lol '*100
        self.label.setText(self.txt)
reclosedev
Не очень понятно какое расположение вы хотите получить в результате. Но тут проблема в следующем
self.scroll = QScrollArea(self)
QScrollArea становится потомком окна и располагается непонятно где. Если используете Layout'ы, то ScrollArea в них и нужно добавлять
self.scroll = QScrollArea()
...
self.hbox2.addWidget(self.scroll)
А может и в hbox или другой Layout, тут от дизайна зависит.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB