PyQt setText неправильно отображает текст в MacOs - PullRequest
0 голосов
/ 22 января 2019

Я создаю приложение, используя 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' в качестве вывода

То же самое может случиться с метками, хотя иногда виден только старый текст, и мне нужно выделить текст мышью или изменить размер главного окна, чтобы «обновить» текстовое поле и увидеть новое значение.

Проблема не возникает, если я запускаю код на ПК, только в MacO (тестирование в High Sierra и Mojave с одинаковыми результатами)

Некоторые странные поведения:

  • Если расположить текстовое поле в позиции (0,0) в главном окне, что не очень удобно, тогда setText работает правильно.В некоторых других местах окна тоже, но только если он находится очень близко к верхнему левому углу, а рядом нет других элементов.
  • Если я изменяю значение текстового поля при инициализации главного окна, то он корректно рендерится во всех случаях. Проблема появляется, когда вы пытаетесь сделать это из функции (например, после нажатия кнопки), как в прикрепленном коде.Проблема не возникает, если я запускаю код на ПК, только в MacO (протестировано в High Sierra и Mojave с одинаковыми результатами)
  • Если расположить текстовое поле в позиции (0,0) в главном окне, (что не очень практично), тогда setText работает правильно.В некоторых других местах коробки тоже, но только если она очень близко к верхнему левому углу, и рядом нет других элементов.

У кого-нибудь есть догадки, почему это может произойти,и как это можно решить?

ОБНОВЛЕНИЕ. Проблема исчезает , если я запускаю код с python 3.6 в установке conda (PyQt версия 5.9.2).Все еще очень заинтригован, чтобы узнать, что вызвало проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...