Tkinter列表框条目分页

时间:2018-02-27 20:26:43

标签: python-3.x tkinter visual-studio-code

最近,我试图找到一种方法来对通过列表框条目进行分页,这些条目运行的函数可以打开包含表单,标签或其他内容的框架,但我找不到它。

显然,我想创建一个控制面板应用程序,它有一个侧面板,可以在页面/框架之间切换,保存用户将与之交互的小部件。

这是我为了达到这种方式而编写的代码:

import tkinter as tk
from tkinter import ttk


class MainWindow() :
    def __init__(self,root):
        # menu left
        self.menu_upper_frame = tk.Frame(root, bg="#dfdfdf")
        self.menu_title_label = tk.Label(self.menu_upper_frame, text="menu title", bg="#dfdfdf")
        self.menu_title_label.pack()
        self.menu_left_container = tk.Frame(root, width=150, bg="#ababab")
        self.menu_left_upper = tk.Frame(self.menu_left_container, width=150, height=150, bg="red")
        self.menu_left_upper.pack(side="top", fill="both", expand=True)
        # create a listbox of items
        self.Lb1 = tk.Listbox(self.menu_left_upper,bg ="red", borderwidth=0, highlightthickness=0 )
        self.Lb1.insert(1, "Python")
        self.Lb1.insert(2, "Perl")
        self.Lb1.insert(3, "C")
        self.Lb1.insert(4, "PHP")
        self.Lb1.insert(5, "JSP")
        self.Lb1.insert(6, "Ruby")
        self.Lb1.bind("<<ListboxSelect>>", self.OnClick )   #return selected item
        self.Lb1.pack(fill="both", expand=True, pady=50 )
        # right area
        self.inner_title_frame = tk.Frame(root, bg="#dfdfdf")
        self.inner_title_label = tk.Label(self.inner_title_frame, text="inner title", bg="#dfdfdf")
        self.inner_title_label.pack()
        self.canvas_area = tk.Canvas(root, width=500, height=400, background="#ffffff")
        self.canvas_area.grid(row=1, column=1)
        # status bar
        self.status_frame = tk.Frame(root)
        self.status = tk.Label(self.status_frame, text="this is the status bar")
        self.status.pack(fill="both", expand=True)
        self.menu_upper_frame.grid(row=0, column=0, rowspan=2, sticky="nsew")
        self.menu_left_container.grid(row=1, column=0, rowspan=2, sticky="nsew")
        self.inner_title_frame.grid(row=0, column=1, sticky="ew")
        self.canvas_area.grid(row=1, column=1, sticky="nsew") 
        self.status_frame.grid(row=2, column=0, columnspan=2, sticky="ew")
        root.grid_rowconfigure(1, weight=1)
        root.grid_columnconfigure(1, weight=1)

    def OnClick(self,event):

        widget = event.widget
        selection = widget.curselection()
        value = widget.get(selection)
        # print ("selection: ",selection, ": '%s'"% value)
        if value == 'Python':
            self.tabtop()

    def tabtop(self):

        self.tabControl = ttk.Notebook(self.canvas_area, width=400)
        self.tab1 = ttk.Frame(self.tabControl)
        self.tab2 = ttk.Frame(self.tabControl)
        self.tab3 = ttk.Frame(self.tabControl)
        self.tab4 = ttk.Frame(self.tabControl)
        self.tab5 = ttk.Frame(self.tabControl)
        self.tabControl.add(self.tab1, text='Login data' )
        self.tabControl.add(self.tab2, text='Permission')
        self.tabControl.add(self.tab3, text='Roles')
        self.tabControl.add(self.tab4, text='Personal data')
        self.tabControl.add(self.tab5, text='Business data')
        self.tabControl.pack(expand=1, fill="both")
        self.l2 = tk.Label(self.tab2, text="label 2").pack()
        self.l3 = tk.Label(self.tab3, text="label 3").pack()

root = tk.Tk()
root.title("Control Panel")
root.style = ttk.Style()
root.style.theme_use("clam")
user = MainWindow(root)
root.mainloop()

如果你有想法用不同的算法实现相同的方法,请建议!

0 个答案:

没有答案