Форум сайта python.su
self.date_field = QtGui.QLineEdit(self) self.date_field.setText('') self.date_field.setInputMask("B9.9999;_") self.date_field.setMaximumSize(75, 25) self.mainLayout.addWidget(self.date_field, 0, 5) # по нажатию Enter появляется поле для ввода имени и фамилии сотрудника self.connect(self.date_field, QtCore.SIGNAL('returnPressed()'), self.raiseWorkmanField) #метод создающий поле для ввода имени и фамилии сотрудника def raiseWorkmanField (self): self.workman_field = QtGui.QLineEdit(self) self.workman_field.setText('') self.workman_field.setFocus() self.workman_field.setMaximumSize(150, 25) self.workman_field.setCompleter(QtGui.QCompleter(self.workman_lst)) self.mainLayout.addWidget(self.workman_field, 0, 6) self.connect(self.workman_field, QtCore.SIGNAL('returnPressed()'), lambda: (self.information(date=(self.date_field.text()),workman=(self.workman_field.text())), self.date_field.deleteLater(), self.comboBox_sort.setCurrentIndex(0),self.delWorkmanField())) #удаление поля для ввода фамилии сотрудника def delWorkmanField (self): self.mainLayout.removeWidget(self.workman_field) #удаление поля из layout self.workman_field.deleteLater() #удаление поля как объекта PyQt4 self.workman_field.setParent(None) #лишение поля родителя del self.workman_field #удаление объекта Python
Отредактировано Agri (Март 12, 2017 18:55:48)
Офлайн
Офлайн
AgriОчень противоречивые чувства у меня вызывают данные действия. Для понимания, у Вас в приложении, к примеру при нажатии на кнопку удаляется виджет QLineEdit с формы? Если так, то мое мнение, это не правильный подход, логичней скрыть его или заблокировать на редактирование.
Нужно удалить QLineEdit, но при попытке удаления приложение падает
Отредактировано MrViktor (Март 13, 2017 05:12:31)
Офлайн
выложите запускабельный пример на котором повторяеться ошибка. Потому как тут гадать можно до бесконечности. Например я набросал простенький пример , все удаляеться корректно.
# -*- coding: utf-8 -*- import sys from PyQt4 import QtGui from PyQt4 import QtCore class WIndow(QtGui.QWidget): def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.layout = QtGui.QVBoxLayout(self) self.layout.setAlignment(QtCore.Qt.AlignCenter) self.label = QtGui.QLabel(text='Object') self.layout.addWidget(self.label) self.lineEdit = QtGui.QLineEdit() self.layout.addWidget(self.lineEdit) self.button = QtGui.QPushButton('DELETE') self.layout.addWidget(self.button) self.button.clicked.connect(self.deleteLineEdit) self.show() def deleteLineEdit(self): self.layout.removeWidget(self.lineEdit) self.lineEdit.deleteLater() self.lineEdit.setParent(None) del self.lineEdit print('work') app = QtGui.QApplication(sys.argv) mainWin=WIndow() sys.exit(app.exec_())
[code python][/code]
Офлайн
PEHDOMА коннект надо удалять у удаляемого поля?
Офлайн
MrViktor
Собственно промучившись еще пол дня, я сделал так self.workman_field.hide()
и еще по поводу disconnect как в моем случае правильно написать. а то я новичок в этом деле…
Отредактировано Agri (Март 13, 2017 14:06:15)
Офлайн
AgriМне кажется так правильней, ввиду того, что если вдруг понадобиться кардинально изменить интерфейс со всем этим кодом будут проблемы.
MrViktorСобственно промучившись еще пол дня, я сделал так self.workman_field.hide()
Офлайн
MrViktorДа насколько я помню, КуТэ само удалит все конекты при удалении виджета.
А коннект надо удалять у удаляемого поля?
self.button2.clicked.connect(lambda: print(self.lineEdit.text()))
[code python][/code]
Отредактировано PEHDOM (Март 13, 2017 16:28:31)
Офлайн
PEHDOMДа, именно про это спросил.
Или вы име ввиду коннекты к виджету?
Офлайн