Как разделить 2d массив из текстового файла на отдельные элементы и применить к ним заголовок - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть текстовые файлы, в которых хранятся данные в зависимости от имени файла.Я сделал так, чтобы пользователи могли выбирать, какой текстовый файл они хотят искать, и в зависимости от того, какие они выбирают, данные для этого файла будут отображаться под правильным заголовком для этого файла.Проблема в том, что я не могу выровнять заголовки с данными из файла, поскольку данные могут различаться по размеру.

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

def searchPage():
    def clearWidgets(chosenFrame):
            for widget in chosenFrame.winfo_children():
                widget.destroy()
    def populateData(dataFrame,searchOptions):
        clearWidgets(dataFrame)
        rowCount = 0
        colCount = 0
        searchFileName = searchChoice.get()

        with open('{}.txt'.format(searchFileName)) as f:
            fileData = ([[item for item in line.strip().split()] for line in f])
            print(fileData)
            for row in fileData:
                rowCount+=1
                colCount=0
                for element in row:
                    print(element)
                    rowData = Label(dataFrame,text=element,font=('Courier',14),anchor='w')
                    rowData.grid(row=rowCount,column=colCount,padx=5)
                    colCount+=1
##            for index,array in enumerate(fileData):
##                rowCount +=1
##                print(array)
##                for index2,variable in enumerate(array):
##                    print(index2)
##                    rowData = Label(dataFrame,text=variable,anchor='w',fg='#CCCCCC',bg='#333333')
##                    rowData.grid(row=rowCount,column=index)              
        #for line in fileData:
        #    rowData = Label(dataFrame,text=line,font=('Courier',14),width=60,anchor='w')
        #    rowData.grid(row=rowCount,column=0,rowspan=6)


    def searches(searchOptions,dataFrame):


        clearWidgets(labelFrame)
        colCount = 0
        headingCount = 0
        labels={}

        for labelTxt in selections[searchChoice.get()]:
            labels[labelTxt] = Label(labelFrame,text=labelTxt,width=15,bg='#CCCCCC',fg='#333333')
            labels[labelTxt].grid(sticky=W,row=0,column=colCount,padx=15)
            colCount+=1
            headingCount+=1

    searchWindow = Tk()
    searchWindow.title('Search')
    searchWindow.configure(bg='#333333')

    frame = Frame(searchWindow)
    frame.configure(bg='#333333')
    frame.grid(row=0,column=0,padx=100,pady=20)

    labelFrame = Frame(searchWindow,bg='#333333')
    labelFrame.grid(row=1,column=0,sticky=W)

    canvFrame = Frame(searchWindow)
    canvFrame.grid(row=3,column=0,sticky=NSEW)
    canvFrame.columnconfigure(0,weight=1)

    scrollFrame = Frame(canvFrame)
    scrollFrame.grid(row=2,column=0,stick=NW)

    def onFrameConfigure(canvas):
        canvas.configure(scrollregion=canvas.bbox("all"))

    canvas = Canvas(scrollFrame)
    canvas.grid(row=0,column=0)


    dataFrame = Frame(canvas,bg='#333333')

    vsb = Scrollbar(scrollFrame,orient='vertical',command = canvas.yview)
    vsb.grid(row=0,column=1,sticky=NS)
    canvas.configure(yscrollcommand=vsb.set,bg='#333333')

    #canvas.pack(side='bottom', fill='both', expand=True)
    canvas.create_window((4,4),window=dataFrame,anchor='nw')
    #dataFrame.update_idletasks()
    dataFrame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas))
    canvas.configure(width=1250,height=600)

    #button config
    s = ttk.Style()
    s.configure('my.TButton', font=('Courier', 18),height=4,width=10,fg='#333333',bg='#CCCCCC')

    #entry config
    e = ttk.Style()
    e.configure('my.TEntry', font=('Courier', 18),height=4,width=10,fg='#333333',bg='#CCCCCC')

    pageTitle = Label(frame,text='Search Database',font=("Courier",44),fg='#CCCCCC',bg='#333333')
    pageTitle.grid(row=0,column=0,padx=10,pady=6,columnspan=2)

    returnBtn = Button(frame,text='Back',bg='#CCCCCC',fg='#333333',command= lambda:[f() for f in
                                                                [searchWindow.destroy,ownermenu]])
    returnBtn.place(x=500,y=500)

    searchFor = Label(frame,text='Search for: ',font=("Courier",18),fg='#CCCCCC',bg='#333333')
    searchFor.grid(row=1,column=0,padx=20)
    bookingHeadings = ('ID','CustomerID','InstructorID','CourseID',
                        'AmountPaid','HoursUsed','HoursRemaining')
    courseHeadings = ('ID','Type','Cost')
    customerHeadings = ('ID','Forename','Surname','PhoneNum','Postcode',
                        'LicenseNum')
    instructorHeadings = ('ID','Forename','Surname','PhoneNum',
                          'Postcode','LicenseNum','Password')
    lessonHeadings = ('ID','BookingID','Time','Date')
    selections = {'Bookings': bookingHeadings, 'Course': courseHeadings,
                'Customer': customerHeadings, 'Instructors': instructorHeadings,
                'Lessons': lessonHeadings}

    searchChoice = StringVar()
    searchOptions = ttk.Combobox(frame,values=list(selections.keys()),textvariable=searchChoice)
    searchOptions.grid(row=1,column=1)

    searchOptions.bind("<<ComboboxSelected>>",lambda x:
                       [searches(dataFrame,searchOptions),
                        populateData(dataFrame,searchOptions)])
    #populateData(searchOptions,dataFrame)



    menubar = Menu(searchWindow)
    filemenu = Menu(menubar,tearoff=0)
    filemenu.add_command(label='Home',command=lambda:[f() for f in [searchWindow.destroy,home1]])
    filemenu.add_separator()
    filemenu.add_command(label='Exit',command=searchWindow.destroy)
    menubar.add_cascade(label='Page',menu=filemenu)

    searchWindow.config(menu=menubar)

    searchWindow.overrideredirect(True)
    searchWindow.geometry("{0}x{1}+0+0".format(searchWindow.winfo_screenwidth(), searchWindow.winfo_screenheight()))

    searchWindow.mainloop()
searchPage()

Я ожидаю, что это будет выглядеть как:

Идентификатор Имя Фамилия PhoneNum ...

000 Джейкоб Петерсон 07793 ...

Однако вместо этого он читается как:

Идентификатор Имя Фамилия PhoneNum ...

000, Джейкоб, Петерсон, 077943 ...

Так что это заметно смещено (я не смог отформатировать это, как ожидалось, но первый пример должен быть выровнен).

Копировать комментарий :

Мне не разрешено использовать CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...