Форум сайта python.su
При смене значения текста в 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_())
Отредактировано Guljaca (Сен. 13, 2012 14:21:38)
Офлайн
Слишком много пересоздается при клике на кнопку, возможно виджет удаляется или еще что-то, лень разбираться. Если задача добавить в QLabel текст, то хватило бы:
def change(self,x): print 2 self.txt += 'test '*100 self.label.setText(self.txt)
Офлайн
Помогло, но полоса прокрутки работает только, когда она находится вблизи рамки. Стоит ее слегка отодвинуть - намертво блокируется.
Это проблема возникает при добавлении второго 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)
Отредактировано Guljaca (Сен. 13, 2012 22:58:15)
Офлайн
Не очень понятно какое расположение вы хотите получить в результате. Но тут проблема в следующем
self.scroll = QScrollArea(self)
self.scroll = QScrollArea() ... self.hbox2.addWidget(self.scroll)
Отредактировано reclosedev (Сен. 14, 2012 17:45:03)
Офлайн