LINUX.ORG.RU

Не получается создать label в слоте. Испровобовал все

 


0

1

Код проверял очень тщательно.

  
import sys
from PyQt4 import QtGui, QtCore


class Lbl(QtGui.QWidget):
    
    def __init__(self):
        super(Lbl, self).__init__()
        
        self.initUI()
            
    def initUI(self):       
        self.resize(200, 200)
        
        self.btn = QtGui.QPushButton('btn', self)
        self.btn.clicked.connect(self.count)

    def count(self): 
        self.label = QtGui.QLabel('carecarecarecare', self)
        self.label.move(100, 100)
        self.label.resize(100, 100)
        
app = QtGui.QApplication(sys.argv)
lbl = Lbl()
lbl.show()
sys.exit(app.exec_())


Ответ на: комментарий от Deleted

Понятно. Спасибо.

Думаю, проблема не единичная. Странно, что в вики про это не нашел

kramh
() автор топика
Ответ на: комментарий от Deleted

Подскажи еще, пожалуйста, почему внутри слота, show «пролетает»? Как я понял эмпирическим путем, это относится ко всем появляющимся виджетам, которые находятся внутри слотов.

По сути, по теме инфы вообще мало. http://doc.qt.io/qt-4.8/qwidget.html#show ничего более полного нет, а здесь почти ничего не сказано.

kramh
() автор топика
Ответ на: комментарий от kramh

По ссылке написано, что метод show() показывает виджет, а также виджеты внутри него. Таким образом, виджеты созданные в initUI() создаются до того, как show() будет вызван для всего окна, так что когда вызывается show() для всего окна, уже добавленные на него виджеты также становятся видимыми. А для виджетов, создаваемых в слотах, нужно вызывать show() самостоятельно, потому что метод show() для всего окна после их создания не вызывается. Это можно наблюдать, если сделать так:

def count(self):
    self.hide()
    self.label = QtGui.QLabel('carecarecarecare', self)
    self.label.move(100, 100)
    self.label.resize(100, 100)
    self.show()

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.