PyQt5 QTextBrowser - setText - Проблема выравнивания? - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь сделать простую консоль с графическим интерфейсом, используя PyQt5.При попытке напечатать текст, используя QTextBrowser - setText, он теряет выравнивание и выглядит плохо.но текст выровнен в моей консоли Python

Я использую функцию setText для отображения моего фрейма данных.При изменении параметра justify в df.to_string () я могу видеть измененное выравнивание в консоли python, но это не отражается в моей консоли Qt.

Код:

import sys
from GUI_4 import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets
import New_Read_Map_File

def window():    
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QWidget()   
    label = QtWidgets.QTextBrowser(MainWindow)                    
    label.setStyleSheet('color: blue')    
    MainWindow.setGeometry(600,150,800,800)
    label.setGeometry(10,10,780,780)    
    GetData()
    label.setText(DisplayData)
    MainWindow.show()
    sys.exit(app.exec_())    

def GetData():
    global DisplayData
    New_Read_Map_File.read_MapFile_main()
    DisplayData = (New_Read_Map_File.df.to_string(col_space = 14,justify = "justify"))    
    print(DisplayData)


window()

Ожидаемое выравнивание

Наблюдаемый Qt GUI

1 Ответ

0 голосов
/ 21 декабря 2018

Проблема вызвана шрифтом, в случае консолей и многих IDES используется моноширинный шрифт .

Например, если вы используете шрифт Monospace:

import numpy as np
import pandas as pd
from PyQt5 import QtCore, QtGui, QtWidgets

def pandas_to_str():
    df = pd.DataFrame({ 
        'A' : 1.,
        'B' : pd.Timestamp('20130102'),
        'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
        'D' : np.array([3] * 4,dtype='int32'),
        'E' : pd.Categorical(["test","train","test","train"]),
        'F' : 'foo' })
    return df.to_string(col_space =14,justify = "justify")

if __name__ == '__main__':
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = QtWidgets.QTextBrowser()
    w.setStyleSheet('color: blue') 
    w.setFont(QtGui.QFont("Monospace"))
    w.setWordWrapMode(QtGui.QTextOption.NoWrap)
    w.setText(pandas_to_str())
    w.showMaximized()
    sys.exit(app.exec_())

enter image description here

...