Tkinter/Python对齐字符串中的文本(类的项目)

2024-10-01 17:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在TKinter中加载一个列表框。字符串是矩阵中字段的集合。4个字段,1个日期,1个浮动,2个文本。你知道吗

但是,由于字体比例的原因,我无法将每行中的文本排列成列。你知道吗

这是我现在的密码

from tkinter import *
from tkinter import ttk
from datetime import *
import locale
# for currency display, set the locale
locale.setlocale( locale.LC_ALL, '' )



class main_gui(Frame):

    def __init__(self):                                                 #Intialize key variables and call the main screen.
        self.Ledgerdata = [ ]
        print ("main_gui __init__")
        self.load_data()
        self.main_screen()

    def load_data(self):
        # stub for testing - to be rewritten to read external file and load into Ledgerdata.

        entry = []
        entry.append("4/17/2016, 24, 1, Doctor")
        entry.append("4/18/2016, 32, 1, Mechanic whose name is bill")
        entry.append("4/19/2016, 45, 1, Grocery")
        entry.append("4/11/2016, 19, 1, Puppet")
        entry.append("4/17/2016, 119.50, 1, Johns Computer House")
        entry.append("4/11/2016, 1250, 1, Sidney Barthalmew")

        for entry_index in range(len(entry)):
            entry[entry_index] = entry[entry_index].split(",")

            date_conversion = entry[entry_index][0].split("/")  # Convert date from text string
            entry[entry_index][0] = date(int(date_conversion[2]),  # to datetime variable
                                         int(date_conversion[0]),
                                         int(date_conversion[1]))
            self.Ledgerdata.append((entry[entry_index][0],  # Add transaction to Ledgerdata
                                                        float(entry[entry_index][1]),
                                                        int(entry[entry_index][2]),
                                                        entry[entry_index][3]))
#====== Data from file is read and loaded into Ledgerdata

    #main_screen - main display screen for Ledgerdata
    #  Will show list of transactions, total for each category,
    #  with buttons to Add, Edit, Delete, Create Summary and Exit
    def main_screen(self):
        root = Tk()                                                     # reference to the GUI toolkit
        main_window = ttk.Frame(root)
        main_window.grid(row=0,column=0)                                # overall Frame
        display_frame = ttk.Frame(main_window)                          # list display frame
        display_frame.grid(column=0, row = 0)
        option_frame = ttk.Frame(main_window)                       # selection frame - to be written.
        option_frame.grid(column=0, row=15, columnspan=8)
        summary_frame = ttk.Frame(main_window)
        summary_frame.grid(column = 10, row = 0)
        summary_frame.columnconfigure(0, minsize=50)
        summary_frame.columnconfigure(1, minsize=250)

        #Start display frame

        list_header = Label(display_frame, width = 100,                  # Header line for List
                            font = 12,anchor = W,                       #    NEEDS CLEANUP
                            text = "   Date       Amount    Description                Code")
        list_header.grid(row=1)

        list_of_transactions = Listbox(display_frame,width =100, height = 20, font = 12)  #Generate listbox widget
        list_of_transactions.grid(row=2, column = 0)

        # Loop for number of transactions in Ledgerdata.  Loop adds formatted transaction info to list_of_transactions
        #   liststring object for display
        for x in range(len(self.Ledgerdata)):
            output_string = '{0:10}  {1:>8}  {2:<50} {3:<40}'.format(
                                                     str(self.Ledgerdata[x][0].strftime("%m/%d/%y"))
                                                     ,locale.currency(self.Ledgerdata[x][1], grouping=True)
                                                     ,(self.Ledgerdata[x][3])
                                                     ,(self.Ledgerdata[x][2]))
            list_of_transactions.insert(x,output_string)
            list_of_transactions.grid(row=x, column = 0)




        #main_window.pack()
        mainloop()


main_gui()

有人知道如何让字符串中的元素与文本保持相同的宽度吗???你知道吗

一如既往地谢谢你, 达雷尔

编辑-每个请求,添加可以运行的整个代码段。我不得不把它从我的主程序中去掉,去掉几个与当前问题无关的部分,并做一些不影响当前问题的更改。所以这只是一个独立的测试平台。你知道吗


Tags: oftoselfforindexmaindisplayframe

热门问题