我可以在两个笔记本页面中复制一个列表框

时间:2017-08-10 12:44:11

标签: python tkinter

我正在使用python 3.4和tkinter。我有一个有两页的笔记本。我有一个列表框,需要在两个页面上。

我想知道我是否可以设置一次列表框并在两个页面上使用它,或者如果我需要在每个页面上设置单独的列表框并在一个页面中的列表框更改时同时管理它们?

1 个答案:

答案 0 :(得分:1)

您无法同时将列表框打包/网格/放置在两个不同的帧中。

但是,每次笔记本选项卡更改时,您都可以重新打包/网格/放置列表框。为此,我使用了每次笔记本选项卡更改时触发的<<NotebookTabChanged>>事件:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

notebook = ttk.Notebook(root)
notebook.pack()

frame1 = tk.Frame(notebook, bg='red', width=400, height=400)
frame1.pack_propagate(False)

frame2 = tk.Frame(notebook, bg='blue', width=400, height=400)
frame2.pack_propagate(False)

notebook.add(frame1, text='frame 1')
notebook.add(frame2, text='frame 2')

var = tk.StringVar(root, 'a b c d e f g')
listbox = tk.Listbox(notebook, listvariable=var)

def display_listbox(event):
    tab = notebook.tabs()[notebook.index('current')]
    listbox.pack(in_=tab)

notebook.bind('<<NotebookTabChanged>>', display_listbox)

root.mainloop()

关于display_listbox的解释:

  • notebook.tabs()返回(frame1, frame2)(即标签的元组)
  • notebook.index('current')返回当前可见标签的索引
  • in_选项可用于指定我们要在其中打包列表框的小部件(它也适用于gridplace