Почему этот код Python tkinter не отображает все строки текстового файла? - PullRequest
0 голосов
/ 27 мая 2020

Мой Python код tkinter для назначения класса не работает. Программа должна отображать все строки текстового файла в окне tkinter, но по какой-то причине она не будет продолжать читать после строки «Состояние:» (она должна идти до адреса ). Никто в моем классе (включая моего учителя) не смог устранить неполадки. Я искал в Google "почему не отображается python readline" и "tkinter not displaying", но ничего не имеет значения. Сообщений об ошибках нет, так что я тоже не могу ориентироваться в этом. Вот код, ответственный за:

def find_cus_win():
    find_cus = Toplevel(main_menu)  # estabilishes it
    find_cus.iconbitmap("Milkbar.ico")  # adds an icon
    find_cus.title("Find Customer Interface")  # titles it

    fc_heading = Label(
        find_cus, text="Find Customer", bg=heading_bg, fg=heading_fg, bd=1
    )
    fc_heading.config(height=2, width=20, font=heading_font)
    fc_heading.pack(side=TOP, fill=BOTH)

    fc_mm_frame = Frame(find_cus)
    fc_body_frame = Frame(fc_mm_frame)
    fc_but_frame = Frame(fc_body_frame)

    label_find_box = Label(fc_body_frame, text="Enter text file name:", fg=label_fg)
    label_find_box.config(font=label_font)
    label_find_box.grid(row=0)

    fc_find_box = Entry(fc_body_frame, width=20, bg=entry_bg, font=entry_font)
    fc_find_box.grid(row=1, columnspan=entry_cspan, pady=10)

    def fc_clear():
        fc_entryboxes = [fc_find_box]

        # clears entry boxes
        for entry in fc_entryboxes:
            entry.delete(0, END)

    # find customer file function
    def find():
        # defines the customer id as the entry box input
        id = str(fc_find_box.get())

        # if the selected exists, the file will be displayed
        if os.path.exists("Accounts/" + str(id) + ".txt"):
            # display customer window
            display_cus = Toplevel(find_cus)
            display_cus.iconbitmap("Milkbar.ico")  # adds an icon
            display_cus.title(str(id) + ".txt")
            display_cus.geometry("1000x1000")

            disc_heading = Label(
                display_cus, text=str(id), bg=heading_bg, fg=heading_fg, bd=1
            )
            disc_heading.config(height=2, width=20, font=heading_font)
            disc_heading.pack(side=TOP, fill=BOTH)

            disc_mm_frame = Frame(display_cus)
            disc_but_frame = Frame(disc_mm_frame)

            # opens the specified file as readable
            file = open("Accounts/" + str(id) + ".txt", "r")
            # creates labels with the lines
            lname1 = Label(
                disc_mm_frame, text=str(file.readline().rstrip()), fg=label_fg
            )
            lname1.config(font=label_font)
            lname1.grid(column=0, row=0, sticky=W)

            lname2 = Label(
                disc_mm_frame, text=str(file.readline().rstrip()), fg=label_fg
            )
            lname2.config(font=label_font)
            lname2.grid(column=0, row=1, sticky=W)

            laddress1 = Label(
                disc_mm_frame, text=str(file.readline().rstrip()), fg=label_fg
            )
            laddress1.config(font=label_font)
            laddress1.grid(column=0, row=2, sticky=W)

            lsuburb1 = Label(
                disc_mm_frame, text=str(file.readline().rstrip()), fg=label_fg
            )
            lsuburb1.config(font=label_font)
            lsuburb1.grid(column=0, row=3, sticky=W)

            lpostcode1 = Label(
                disc_mm_frame, text=str(file.readline().rstrip()), fg=label_fg
            )
            lpostcode1.config(font=label_font)
            lpostcode1.grid(column=0, row=4, sticky=W)

            lstate1 = Label(
                disc_mm_frame, text=str(file.readline().rstrip()), fg=label_fg
            )
            lstate1.config(font=label_font)
            lstate1.grid(column=0, row=5, sticky=W)

            lphone1 = Label(
                disc_mm_frame, text=str(file.readline().rstrip()), fg=label_fg
            )
            lphone1.config(font=label_font)
            lphone1.grid(column=0, row=6, sticky=W)

            lemail1 = Label(
                disc_mm_frame, text=str(file.readline().rstrip()), fg=label_fg
            )
            lemail1.config(font=label_font)
            lemail1.grid(column=0, row=7, sticky=W)

            disc_quit = Button(
            disc_but_frame, text="Quit Customer File", command=lambda: window_quit(display_cus), fg=quit_fg
            )
            disc_quit.config(font=quit_font)
            disc_quit.grid(row=0)

            disc_mm_frame.pack(fill=BOTH)
            disc_but_frame.grid(row=8)

            disc_widgets = [
                lname1,
                lname2,
                laddress1,
                lsuburb1,
                lpostcode1,
                lstate1,
                lphone1,
                lemail1,
                disc_mm_frame,
                disc_but_frame
            ]

            # changes all the backgrounds of non-entry boxes
            for widget in disc_widgets:
                widget["bg"] = "cornflower blue"

Любая помощь приветствуется. При необходимости могу выложить полный код в комментариях

1 Ответ

0 голосов
/ 28 мая 2020

Это не решает вашу проблему, но вы можете использовать:

from tkinter import *
from tkinter.scrolledtext import *
from tkinter.filedialog import *

win = Tk()

f = askopenfile()
f = f.name # extract the name of the file chosen
try:
    file = open(f, "r")
except: # if user clicks "Cancel"
    pass

text = ScrolledText(win, width=80, height=41, wrap=WORD) # create text zone
text.pack(expand=True, fill=BOTH) # pack it in the entire window
text.insert(1.0, file.read())

file.close()

win.mainloop()

, который запрашивает файл, который отображается в текстовом поле.

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