Комбинированное добавить/удаление текста в QTextEdit
Есть виджет QTextEdit, при наступлении события в него выводится текст (информация о событии), при наступлении другого события ОДНОВРЕМЕННОГО с первым, к тексту добавляется еще текст (информация о событии 2).
Загвоздка в том как удалить тот текст, событие которого перестало, а другой если событие еще актуально остался в строке.
Пробовал через append() и все я не знаю куда капнуть.
def on_messageSignal(self, msg):
try:
val = str(msg)
if val == "1":
self.img = QtGui.QPixmap('icons/contener.png')
self.pixmap.setPixmap(self.img)
self.graphicsView.setStyleSheet("background-color: red;")
self.textEdit.append("Аппаратная открыта!")
# pygame.init()
# sound = pygame.mixer.Sound('kalitka.mp3')
# sound.play()
else:
self.img = QtGui.QPixmap('icons/contener.png')
self.pixmap.setPixmap(self.img)
self.graphicsView.setStyleSheet("background-color: white;")
self.textEdit.clear()
#pygame.quit()
except ValueError:
print("error: Not is number")
@QtCore.pyqtSlot(str)
def on_messageSignal1(self, msg):
try:
val = str(msg)
if val == "1":
self.img1 = QtGui.QPixmap('icons/zabor_open.png')
self.pixmap1.setPixmap(self.img1)
self.graphicsView_2.setStyleSheet("background-color: red;")
self.textEdit.append("Проникновение на территорию!")
#self.label_2.setText("Работа\nдизеля!")
pygame.init()
sound = pygame.mixer.Sound('kalitka.mp3')
sound.play()
else:
self.img1 = QtGui.QPixmap('icons/zabor_close.png')
self.pixmap1.setPixmap(self.img1)
self.graphicsView_2.setStyleSheet("background-color: white;")
self.textEdit.clear()
pygame.quit()
except ValueError:
print("error: Not is number")
Как видно при наступлении 2-х событий, сработали 2 датчика, картинки покраснели и вывелось 2 сообщения в одном текстбоксе.
Нужно чтобы если один датчик отключается УДАЛЯЛОСЬ сообщение, которое привязано к этому датчику, а остальной текст оставался пока не выключится другой датчик.
Ответы (2 шт):
Учитывая что это ваш ПЕРВЫЙ ВОПРОС, позволю себе дать вам некотрые рекомендации:
чтобы получать быстрые и правильные ответы - вы должны научиться
создавать минимально-воспроизводимый пример;как создать минимальный и воспроизводимый пример;
все дополнения, которые вы хотите сообщить, надо прописывать
в теле вопроса, а не в комментариях к нему.
Из того что я понял, ваша задача может выглядеть примерно так:
import sys
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.Qt import *
class MainWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.checkOne = QtWidgets.QCheckBox('Событие one')
self.checkTwo = QtWidgets.QCheckBox('Событие two')
self.labelOne = QLabel()
self.labelOne.setPixmap(QPixmap('off.png').scaled(50, 50))
self.labelTwo = QLabel()
self.labelTwo.setPixmap(QPixmap('off.png').scaled(50, 50))
self.textEdit = QTextEdit()
self.layout = QtWidgets.QGridLayout(self)
self.layout.addWidget(self.textEdit, 0, 0, 1, 2)
self.layout.addWidget(self.labelOne, 1 , 0)
self.layout.addWidget(self.checkOne, 1 , 1)
self.layout.addWidget(self.labelTwo, 2 , 0)
self.layout.addWidget(self.checkTwo, 2 , 1)
self.checkOne.stateChanged.connect(
lambda state=self.checkOne.isChecked(), cb=self.checkOne: \
self.selectCheckBox(state, cb))
self.checkTwo.stateChanged.connect(
lambda state=self.checkTwo.isChecked(), cb=self.checkTwo: \
self.selectCheckBox(state, cb))
def selectCheckBox(self, toggle, cb):
text = ''
if toggle and cb.text() == 'Событие one':
self.labelOne.setPixmap(QPixmap('on.png').scaled(50, 50))
if self.checkTwo.isChecked():
text = text + 'Событие two\n'
text = text + 'Событие one'
elif not toggle and cb.text() == 'Событие one':
self.labelOne.setPixmap(QPixmap('off.png').scaled(50, 50))
if self.checkTwo.isChecked():
text = text + 'Событие two\n'
elif toggle and cb.text() == 'Событие two':
self.labelTwo.setPixmap(QPixmap('on.png').scaled(50, 50))
if self.checkOne.isChecked():
text = text + 'Событие one\n'
text = text + 'Событие two'
elif not toggle and cb.text() == 'Событие two':
self.labelTwo.setPixmap(QPixmap('off.png').scaled(50, 50))
if self.checkOne.isChecked():
text = text + 'Событие one'
self.textEdit.setText(text)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
off.png
on.png
Прошу меня простить за то что коряво излагаю вопрос, научусь) ваш код помог, спасибо добрый человек!
if val == "1":
self.img = QtGui.QPixmap('icons/contener.png')
self.pixmap.setPixmap(self.img)
self.graphicsView.setStyleSheet("background-color: red;")
self.text = self.text + 'Блок контейнер открыт!'
self.textEdit.setText(self.text)
else:
self.img = QtGui.QPixmap('icons/contener.png')
self.pixmap.setPixmap(self.img)
self.graphicsView.setStyleSheet("background-color: white;")
if 'Блок контейнер открыт!' in self.text:
self.text=self.text.replace('Блок контейнер открыт!','')
self.textEdit.setText(self.text)



