2016-04-29 7 views
0

私はこのコードスニペットを持っている:リストボックス内の要素を無効にすることはできますか?

import Tkinter as tk 

class SampleApp(tk.Tk): 
    def __init__(self, *args, **kwargs): 
    tk.Tk.__init__(self, *args, **kwargs) 

    list = ['one','disable me','two'] 
    listbox = tk.Listbox(self,height=len(list)) 
    for item in list: 
     listbox.insert(tk.END, item) 
    listbox.pack() 


if __name__ == "__main__": 
    app = SampleApp() 
    app.mainloop() 

は、それが第二選択ラインを無効にすることは可能ですので、それは選択することはできませんか?さらに、それを別の(灰色がかった)フォントで表示することは可能ですか?

答えて

3

この目標を達成する方法はありません。しかし、他の方法があります! itemconfig(index, fg="gray")を使用すると、フォントの色をグレーに設定できます。また、リストボックスを<<ListBoxSelection>>イベントにバインドして、コールバックメソッドを定義することもできます。この方法では、選択されたアイテムのインデックスを.curselection()でチェックし、アイテムのインデックスと一致する場合は選択をクリアすることができます。

コードスニペット:

import Tkinter as tk 

class SampleApp(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     list = ['one','disable me','two'] 

     self.listbox = tk.Listbox(self,height=len(list)) 
     for item in list: 
      self.listbox.insert(tk.END, item) 
     self.listbox.pack() 
     self.disable_item(1) 

    def disable_item(self,index): 
     self.listbox.itemconfig(index, fg="gray") 
     self.listbox.bind("<<ListboxSelect>>", 
          lambda event, index=index: self.no_selection(event, index)) 

    def no_selection(self, event, index): 
     if self.listbox.curselection()[0] in str(index): 
      self.listbox.selection_clear(index) 

if __name__ == "__main__": 
    app = SampleApp() 
    app.mainloop() 

Alternativlyあなたはそれらのウィジェットの完全な制御を持っているので、ちょうどラベル・ウィジェットが含まれていると場所、独自のウィジェットを作成することができます。次に、あなたが望むようにラベルの状態を設定することができます。

+0

ありがとうございます!まさに私が探していたもの。 –

関連する問題