Это не работает, потому что logi c в первом операторе if
неверен:
if firstenter.isModified() == True:
firstenter.setText(str(b))
Вы сбрасываете содержимое первой строки, редактируете вторую, но так как * Текст 1005 * пуст для начала, он устанавливает текст firstenter
соответствующим образом, таким образом сбрасывая его содержимое независимо от того, что вы печатаете. Из-за этого второй if не будет работать по той же причине.
Решение намного проще и использует [sender()
], чтобы узнать, какой объект испустил сигнал:
def conversion():
if self.sender() == firstenter:
secondenter.setText(firstenter.text())
else:
firstenter.setText(secondenter.text())
Обратите внимание, что вы должны использовать text()
, а не displayText()
, поскольку последний может вернуть другой результат, если echoMode()
не установлен на Normal
( по умолчанию).
Кроме того, try/exception
бесполезен, и вы не должны проверять против isModified
, поскольку textEdited
всегда и только выдается, когда пользователь изменяет текст, а не когда текст изменяется программно с помощью setText()
.
Предложение: избегайте фиксированных размеров и позиций, их использование, вероятно, приведет к непригодности интерфейса в системах, отличных от вашей (по разным причинам, включая размер экрана, DPI и шрифты по умолчанию). Вы должны предпочесть менеджеров по расположению вместо.