2015-11-12 2 views
0

Я пытаюсь написать простой код, который изменит существующий текстовый виджет на другой, когда пользователь нажмет кнопку. Так что яPyQt: как заменить виджет кнопкой?

title1=QtGui.QLabel('Hello') 
title2=QtGui.QLabel('bye') 
abutton=QtGui.QPushButton('Click me') 
grid.addWidget(title1,1,5) 
grid.addWidget(abutton,3,5) 

и у меня есть функция:

def myfunc(self): 
     self.grid.removeWidget(self.title1) 
     self.grid.addWidget(title2,1,5) 

, который я ожидаю, чтобы изменить мой «привет» до «до свидания» после того, как я это делаю:

abutton.clicked.connect(self.myfunc) 

но видимо, это не работает. И я проверил: removeWidged работает отлично вне функции (моя первая мысль была, может быть, я делал что-то не так в функции), а также функция сама работает (я проверил ее, сделав в печатных материалах, и это произошло однажды Я нажал кнопку, но виджет все еще был там)

что я могу делать неправильно? Благодарю.

+0

Это опечатка title2 = QtGui.QLalel ('bye') в вашем коде или только в этом вопросе? (QLalel не QLabel) –

+0

это только вот извините. Я разместил его в качестве примера. UPD: отредактировано сообщение – yellalena

+0

Вы подтвердили, что ваш обратный вызов вызывается при нажатии кнопки? –

ответ

1

У вас была опечатка, и вы пытались локальные вары, как много проблем в вашем коде. Вот рабочий пример

from PyQt4 import QtGui, QtCore 
import sys 

class BASEGUICLS(QtGui.QDialog): 
    def __init__(self,parent=None): 
     super(BASEGUICLS, self).__init__(parent) 
     self.gridLayout = QtGui.QGridLayout() 
     self.title1=QtGui.QLabel('Hello') 
     self.title2=QtGui.QLabel('bye') 
     abutton=QtGui.QPushButton('Click me') 
     self.gridLayout.addWidget(self.title1,1,5) 
     self.gridLayout.addWidget(abutton,3,5) 
     self.setLayout(self.gridLayout) 
     abutton.clicked.connect(self.myfunc) 

    def myfunc(self): 
     self.gridLayout.removeWidget(self.title1) 
     self.title1.deleteLater() 
     self.gridLayout.addWidget(self.title2,1,5) 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    ex = BASEGUICLS(None) 
    ex.show() 
    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main() 
+0

Я попытался запустить этот, и он что-то делает ... но он просто удаляет виджет, не создавая нового. :( – yellalena

+0

Что вы подразумеваете под этим что-то? И оно создаст новое. Привет будет удалён, и Bye будет добавлено в том же месте в макете сетки. Если я получу правильное, то это то, о чем вы просите правильно? – Achayan

Смежные вопросы