QTextBrowser наследует QTextEdit, поэтому вы можете использовать метод setCurrentFont(QFont)
для установки моноширинного шрифта.
self.browser = QTextBrowser()
self.browser.setCurrentFont(QFont("Courier New")) #Or whatever monospace font family you want...
Что касается общих комментариев к стилю, возможно, есть способ изменить это.Ваш текст заменяет updateUi()
на регулярное выражение, но я не могу быть уверен, не увидев пример данных, чтобы выяснить, что вы пытаетесь сделать.
Кроме того, вам, вероятно, следует провести рефакторинг
try:
self.browser.append(sympy.printing.pretty(sympy.sympify(text)))
self.browser.clear()
self.browser.append(sympy.printing.pretty(sympy.sympify(text)))
except:
if text=='': self.browser.clear()
В нечто более похожее на:
self.browser.clear()
try:
self.browser.append(sympy.printing.pretty(sympy.sympify(text)))
except:
if text=='': self.browser.clear()
За исключением, вероятно, перехвата ожидаемого фактического исключения.
РЕДАКТИРОВАТЬ Вот кое-что для уравнения, нормализующего это выглядиткак вы пытаетесь это сделать, он работает с строчными буквами az и действительными числами:
def updateUi(self):
text = unicode(self.lineedit.text())
text = re.sub(r'(\d+)([\(]|[a-z])',r'\1*\2',text) #for multiplication
text = re.sub(r'([a-z]|[\)])(\d+)',r'\1^\2',text) #for exponentiation
Первый шаблон ищет 1 или более цифр \d+
, за которыми следуют открытые скобки или одна буква az [\(]|[a-z]
.Он использует круглые скобки для захвата цифровой части шаблона и переменной части шаблона и вставляет * между ними.\1*\2
.
Второй шаблон ищет переменную az или закрывающую скобку [a-z]|[\)]
, за которой следуют одна или несколько цифр \d+
.Он использует групповые скобки, чтобы снова захватить цифру и переменную, и вставляет между ними ^ \1^\2
.
Это не совсем идеально (не обрабатывает xy --> x*y
), но ближе к нему.Если вы хотите создать полноценную систему компьютерной алгебры, вам, вероятно, потребуется создать специальный синтаксический анализатор:)