Навигация по страницам в tkinter с использованием функций - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь выполнить навигацию в tkinter, используя functions, так как я не в курсе class programming, но получаю эту ошибку AttributeError: 'Label' object has no attribute 'show'. Я хочу сделать это, чтобы у меня были разные виджеты во всех трех фреймах.

Мне нужна ваша помощь, чтобы поднять фрейм, чтобы появился следующий, а также вернуться назад.

import tkinter as tk



def show():
    global show
    gr = tk.Frame(root)
    gr.lift()



def next_page():
    global show
    # move the first page to the end of the list,
    # then show the first page in the list
    page = pages.pop(0)
    pages.append(page)
    pages[0].show()



def prev_page():
    global show
    # move the last page in the list to the front of the list,
    # then show the first page in the list.
    page = pages.pop(-1)
    pages.insert(0, page)
    pages[0].show()





root = tk.Tk()
root.wm_geometry("400x400")


Page = tk.Label(root, text="page number")
Page.pack()


buttonframe = tk.Frame(root)
container = tk.Frame(root)

buttonframe.pack(side="top", fill="x", expand=False)
container.pack(side="top", fill="both", expand=True, padx=2, pady=2)

next_button = tk.Button(buttonframe, text="Next", command=next_page) # self.next_page
prev_button = tk.Button(buttonframe, text="Previous", command=prev_page) # prev_page
prev_button.pack(side="left")
next_button.pack(side="left")



pages = []
for i in range(3):
    page = tk.Label(text="page %d" % i)
    page.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
    pages.append(page)
#pages[0].show()


root.mainloop()

РЕДАКТИРОВАТЬ

Это моя next_page функция, но пока она не работает, я использовал place_forget

def next_page():
    i = var.get()
    if i < 2 :
        pages[i].place_forget()
        var.set(i + 1)
        pages[i+1].place(in_=container, x=0, y=0, relwidth=1, relheight=1)


        if pages[i] == 0:
            pages[i].place_forget()
            tree = ttk.Treeview()
            tree.pack()
        elif pages[i] == 1:
            pages[i].place_forget()
            listbox = tk.Listbox()
            listbox.pack()
        elif pages[i] == 2:
            pages[i].place_forget()
            listbox = tk.Text()
            listbox.pack()

1 Ответ

0 голосов
/ 28 октября 2019

Чтобы «скрыть» метку, используйте метод .place_forget(), связанный с типом «менеджера геометрии», который вы выбрали при создании виджета:

label.place_forget()

Если вы используете place_forget, позже вы сможете снова показать виджет, снова вызывая place.

это один из способов:

def next_page():
    i = var.get()
    if i < 2 :
        pages[i].place_forget()
        var.set(i + 1)
        pages[i+1].place(in_=container, x=0, y=0, relwidth=1, relheight=1)


def prev_page():
    i = var.get()
    if i > 0:
        pages[i].place_forget()
        var.set(i - 1)
        pages[i-1].place(in_=container, x=0, y=0, relwidth=1, relheight=1)


root = tk.Tk()
root.wm_geometry("400x400")

Page = tk.Label(root, text="page number")
Page.pack()


buttonframe = tk.Frame(root)
container = tk.Frame(root)

buttonframe.pack(side="top", fill="x", expand=False)
container.pack(side="top", fill="both", expand=True, padx=2, pady=2)

next_button = tk.Button(buttonframe, text="Next", command=next_page) # self.next_page
prev_button = tk.Button(buttonframe, text="Previous", command=prev_page) # prev_page
prev_button.pack(side="left")
next_button.pack(side="left")


var = tk.IntVar()
var.set(0)

pages = []
for i in range(3):
    page = tk.Label(text="page %d" % i)
    pages.append(page)
pages[0].place(in_=container, x=0, y=0, relwidth=1, relheight=1)

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