Я создаю приложение, используя PyQt5 (pythyon 3.7, MacOs X) Когда я изменяю текст в текстовом поле, используя инструкцию
self.line_main.setText(final_text)
из функции (которая подключена к кнопке).новый текст не отображается должным образом в текстовом поле (см. скриншот), и старый и новый текст странным образом перекрываются.Ниже приведен упрощенный код, иллюстрирующий проблему:
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QWidget, QLabel, QLineEdit
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtCore import QSize
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setMinimumSize(QSize(200, 200))
self.setWindowTitle("PyQt test")
self.line_main = QLineEdit(self)
self.line_main.move(20,20)
bt_upperCase = QPushButton('Upper Case', self)
bt_upperCase.move(20, 60)
bt_upperCase.clicked.connect(self.click_upCase)
def click_upCase(self):
final_text=self.line_main.text().upper()
self.line_main.setText(final_text)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit( app.exec_() )
снимок экрана мини-приложения с 're' в качестве ввода в качестве 'RE' в качестве вывода
![](https://i.stack.imgur.com/Kcr2O.png)
То же самое может случиться с метками, хотя иногда виден только старый текст, и мне нужно выделить текст мышью или изменить размер главного окна, чтобы «обновить» текстовое поле и увидеть новое значение.
Проблема не возникает, если я запускаю код на ПК, только в MacO (тестирование в High Sierra и Mojave с одинаковыми результатами)
Некоторые странные поведения:
- Если расположить текстовое поле в позиции (0,0) в главном окне, что не очень удобно, тогда setText работает правильно.В некоторых других местах окна тоже, но только если он находится очень близко к верхнему левому углу, а рядом нет других элементов.
- Если я изменяю значение текстового поля при инициализации главного окна, то он корректно рендерится во всех случаях. Проблема появляется, когда вы пытаетесь сделать это из функции (например, после нажатия кнопки), как в прикрепленном коде.Проблема не возникает, если я запускаю код на ПК, только в MacO (протестировано в High Sierra и Mojave с одинаковыми результатами)
- Если расположить текстовое поле в позиции (0,0) в главном окне, (что не очень практично), тогда setText работает правильно.В некоторых других местах коробки тоже, но только если она очень близко к верхнему левому углу, и рядом нет других элементов.
У кого-нибудь есть догадки, почему это может произойти,и как это можно решить?
ОБНОВЛЕНИЕ. Проблема исчезает , если я запускаю код с python 3.6 в установке conda (PyQt версия 5.9.2).Все еще очень заинтригован, чтобы узнать, что вызвало проблему.