2017-08-10 9 views
0

私はpython 3.4とtkinterを使用しています。私は2ページのノートを持っています。私は両方のページにある必要があるリストボックスを持っています。pythonリストボックスを2つのノートブックページに複製できますか?

リストボックスを一度セットアップして両方のページで使用できるのか、各ページに別々のリストボックスをセットアップして、リストボックスを変更する必要があるのでしょうか?

+0

あなたが傾ける理由はありません。あなたが望むものを達成するには、いくつかの方法が必要です。これまでに試したことのサンプルコードを提供すれば、誰かが助けることができます。 –

答えて

1

リストボックスを2つの異なるフレームに同時にパック/グリッド/配置することはできません。

ただし、ノートブックタブが変更されるたびにリストボックスを再パック/グリッド/配置することができます。 display_listboxについて

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() 

説明:

  • notebook.tabs()戻り(frame1, frame2)(すなわち、タブのタプル)
  • そうするために、私は毎回、ノートブックタブの変更をトリガーされ<<NotebookTabChanged>>イベントを使用しましたnotebook.index('current')は、現在表示されているタブのインデックスを返します。
  • in_オプションを使用して、リストボックスをパックするウィジェットを指定できますoはgridplaceとなります)
関連する問題