对于使用面向对象的python进行编码甚至还很陌生,所以请多多包涵。
我正在尝试为使用PyQt5编写的程序构建GUI。
我已经在Qt Designer中设计了表单,然后使用python -m PyQt5.uic.pyuic -x [FILENAME].ui -o [FILENAME].py
将文件获取为.py。
为了避免更改文件,我使用另一个python文件来调用form.py文件和我的program.py并在那里构建所有内容
import sys
from myform import Ui_MainWindow
from mydialog1 import Ui_Dialog as Dlog_1
from mydialog2 import Ui_Dialog as Dlog_2
from PyQt5 import QtCore, QtGui, QtWidgets
from myprogram import *
class Prog(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(Prog, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.show()
self.ui.actionAbout.triggered.connect(self.about)
self.ui.textBrowser.append(show())
def about(self):
dialog = QtWidgets.QDialog()
dialog.ui = Dlog_1()
dialog.ui.setupUi(dialog)
dialog.ui.Adicionar_3.clicked.connect(dialog.close)
dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
dialog.exec_()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = Prog()
MainWindow.show()
sys.exit(app.exec_())
我正在尝试将功能(从myprogram)的输出显示到QTextBrowser小部件,self.ui.textBrowser.append(show())
可以看到,尽管例如它适用于纯文本(“测试”),但不适用于功能。
函数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相同的输出类型?
预先感谢
答案 0 :(得分:0)
如果您真的不想更改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())