Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt4, QScrollArea с динамичной QLabel() - исчезает текст [RSS Feed]

#1 Сен. 13, 2012 14:12:50

Guljaca
От:
Зарегистрирован: 2011-07-11
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4, QScrollArea с динамичной QLabel() - исчезает текст

При смене значения текста в 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)

Офлайн

#2 Сен. 13, 2012 17:20:13

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQt4, QScrollArea с динамичной QLabel() - исчезает текст

Слишком много пересоздается при клике на кнопку, возможно виджет удаляется или еще что-то, лень разбираться. Если задача добавить в QLabel текст, то хватило бы:

    def change(self,x):
        print 2
        self.txt += 'test '*100
        self.label.setText(self.txt)
без вызова test()

Офлайн

#3 Сен. 13, 2012 22:41:40

Guljaca
От:
Зарегистрирован: 2011-07-11
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4, QScrollArea с динамичной QLabel() - исчезает текст

Помогло, но полоса прокрутки работает только, когда она находится вблизи рамки. Стоит ее слегка отодвинуть - намертво блокируется.
Это проблема возникает при добавлении второго 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)

Офлайн

#4 Сен. 14, 2012 17:28:41

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQt4, QScrollArea с динамичной QLabel() - исчезает текст

Не очень понятно какое расположение вы хотите получить в результате. Но тут проблема в следующем

self.scroll = QScrollArea(self)
QScrollArea становится потомком окна и располагается непонятно где. Если используете Layout'ы, то ScrollArea в них и нужно добавлять
self.scroll = QScrollArea()
...
self.hbox2.addWidget(self.scroll)
А может и в hbox или другой Layout, тут от дизайна зависит.

Отредактировано reclosedev (Сен. 14, 2012 17:45:03)

Офлайн

  • Начало
  • » GUI
  • » PyQt4, QScrollArea с динамичной QLabel() - исчезает текст[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version