首页 > 解决方案 > 字符串格式在 python Tkinter 文本小部件中不起作用

问题描述

我正在开发一个选项计算器,它可以显示各种类型的计算方法和结果。我想以字符串和固定宽度的格式显示这些结果。所以我尝试了下面的代码。

Hieght = 600
Width = 800
interface = tk.Tk()
canvas = tk.Canvas(interface, height= Hieght, width=Width, bg='#266969')
canvas.pack()
interface.winfo_toplevel().title("Option Calculator")

lower_frame = tk.Frame(interface, bg='#266969', bd=10)
lower_frame.place(relx=0.5, rely=0.5, relwidth = 0.8, relheight=0.5, anchor='n')

import tkinter.font as tkFont
customFont = tkFont.Font(family="Helvetica", size=12)

output = tk.Text(lower_frame, font=customFont, fg='#ffffff', bg='#32a8a8')
output.place(relwidth=1, relheight=1)
out_Str = 'In B-S Formula\
            \nCall Value: {:>20.10f}\
            \nPut Value: {:>20.10f}\
            \n----------------------------------------------\
            \nIn Monte Carlo Simulation\
            \n{:<20s}{:>20s}{:>20s}\
            \n{:<20s}{:>20.10f}{:>20.10f}\
            \n{:<20s}{:>20.10f}{:>20.10f}\
            \n{:<20s}{:>20.10f}{:>20.10f}'.format \
            (Option1.CallPrice, \
                Option1.PutPrice, \
                    ' ', 'Call Option', 'Put Option', \
                        'Mean', Option1.Call_Mean_n, Option1.Put_Mean_n, \
                            'Upper bound', Option1.Call_upperI, Option1.Put_upperI, \
                                'Lower bound', Option1.Call_lowerI, Option1.Put_lowerI)

output.insert(tk.END, out_Str)

这些文本无法以我想要的方式在文本框区域对齐(看涨期权和看跌期权可以与数字对齐,数字也可以彼此对齐)。但是当我把控制台复制出来并粘贴到其他地方,比如教科书或这里时,它变成了我想要的方式。控制台(如果我复制并粘贴)如下所示。文本框区域中的控制台显示为附图。

粘贴后的控制台(我想显示的方式) 在此处输入图像描述

文本框中的控制台(实际显示在 tkinter 中) 在此处输入图像描述

谁能告诉我导致差异的原因?以及如何显示我想要的结果?

非常感谢。

标签: python-3.xtkintertextformatting

解决方案


因为字体。例如,Courier New 是一种 ttf、true 类型字体,其中字符的宽度相等


推荐阅读