Отображение вывода функции непосредственно в QtextBrowser - PullRequest
0 голосов
/ 01 февраля 2019

Я довольно новичок в кодировании, даже больше в объектно-ориентированном питоне, поэтому, пожалуйста, потерпите меня.

Я пытаюсь создать графический интерфейс для программы, которую я кодировал перед использованием PyQt5.Я разработал свои формы в Qt Designer, затем использовал python -m PyQt5.uic.pyuic -x [FILENAME].ui -o [FILENAME].py, чтобы получить файл как .py.

, чтобы избежать изменения файла, я использую другой файл python для вызова файла form.py иmy program.py и создайте там все(«тест») он не будет работать с функцией.

функция show () определяется следующим образом:

def show():
    global empresas
    info = ["Nome da empresa", "Site da empresa", "Montante investido"]
    valid = False
    while not valid:
        try:
            gen = ((k, v[0], v[1]) for k, v in empresas.items())
            ename, esite, evalue = zip(*gen)
            valid = True
        except ValueError:
            print('Não existem empresas para mostrar. Introduza mais empresas')
            return
    print("")
    a = ('|{}{:^30}{}| |{}{:^30}{}| |{}{:^30}{}|'.format(c['g'],info[0],c['d'],c['g'],info[1],c['d'],c['g'],info[2],c['d']))
    print("+" + "=" * (len(a)-32) + "+")
    print(a)
    print("+" + "=" * (len(a)-32) + "+")
    for y in range(0,len(ename)):
       if y % 2 == 0:   
           print(f'|{ename[y]:^30}| |{esite[y]:^30}| |{evalue[y]:^17.3f}Milhões de',simb, '|') 
           print("+" + "-" * (len(a)-32) + "+")
       elif y % 2 == 1:
           print(f'|{ename[y]:^30}| |{esite[y]:^30}| |{evalue[y]:^17.3f}Milhões de',simb, '|') 
           print("+" + "-" * (len(a)-32) + "+") 
    return

Эта функция в основном печатает организованную таблицу со всеми элементами изсловарь для консоли.Есть ли способ, позволяющий мне выводить на QtextBrowser тот же тип вывода, что и на консоли?

Заранее спасибо

1 Ответ

0 голосов
/ 01 февраля 2019

Если вы действительно не хотите изменять функцию show, чтобы она возвращала строку вместо прямой ее печати, вы можете использовать для этого перенаправление stdout.По сути, это просто говорит print записать в ваш собственный буфер, который вы можете затем добавить в реальную цель, к которой должна перейти строка:

from contextlib import redirect_stdout
import io

# in __init__ :
f = io.StringIO()   # in-memory string buffer

with redirect_stdout(f):
    # everything printed in here will go to f
    show()    

# now reroute everything written to f to textBrowser
self.ui.textBrowser.append(f.getvalue())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...