Ошибка имени: имя ‘page_num’ не определено

#python #python-3.x #tkinter

#python #python-3.x #tkinter

Вопрос:

#передача пути к файлу Pdf откроет окно программы чтения PDF

 def text_extract(path):
page_num = 0  # variable assignment
root = Tk()   tkinter wiindow
pdf = PdfFileReader(path)  
def page_update(page_num):           #function to update text gui on the basis of page number
    page_obj = pdf.getPage(page_num)
    txt = page_obj.extractText()
    text_wig.delete("1.0", "end")
    text_wig.insert(END,txt)
def page_prev(e=1):        #to see previous page
    global page_num
    if page_num <= 0:
        messagebox.showinfo('Alert','Its a first page')
    else:
        page_num = page_num -1
        page_update(page_num)
def page_next(e=1):        # for next page
    global page_num
    if page_num >= pdf.numPages:
        messagebox.showinfo('Alert','Its a last page')
    else:
        page_num = page_num   1
        page_update(page_num)


Button(root, text='Prev',command = page_prev).grid(row=0, column=1)
Button(root, text='Next',command = page_next).grid(row=0, column=2)
page_obj = pdf.getPage(page_num)
txt = page_obj.extractText()
text_wig = Text(root)
text_wig.grid(row=1, column=1, rowspan=10,columnspan=10)
text_wig.delete("1.0", "end")
text_wig.insert(END,txt)
root.mainloop()
  

#это показывает только первую страницу pdf, кнопки next или prev не работают

Комментарии:

1. Сначала исправьте отступ кода. Кстати, поскольку page_num , по-видимому, оно объявлено внутри text_extract() и оба prev_page() и next_page() также определены внутри функции, вам нужно использовать nonlocal вместо global .

2. нелокальный работает отлично, спасибо

Ответ №1:

если внутри функции есть значение, и вам нужно его использовать или отредактировать вне функции, вам придется написать global page_num , прежде чем определять или редактировать его