1

TkInter リストボックスを単に無効にするにはどうすればよいですか? それはとても簡単なことのように思えますし、おそらくそうです。以下の簡単な例では、リストボックスの状態を完全に選択可能な状態から灰色で選択できない状態に切り替えるボタンがあります。

#!/usr/bin/python

from Tkinter import *

class MyDialog:
    def __init__(self, rootWin):
        self.rootWin_ = rootWin
        self.frame_ = Frame( self.rootWin_, borderwidth=10 )
        self.frame_.grid(row=0, column=0)
        self.listBox_ = Listbox( self.frame_, height=4, width=30, selectbackground='#000000' )
        self.listBox_.grid(row=0, column=0)
        self.lbEnabled_ = 1
        for item in [ 'Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet' ]:
            self.listBox_.insert(END, item)
        self.button_ = Button( self.frame_, text='Disable', command=self.onEnableDisable)
        self.button_.grid(row=1, column=0)

    def go(self):
        self.rootWin_.mainloop()

    def onEnableDisable(self):
        if self.lbEnabled_ == 1:
            self.button_.config( text='Enable' )
            # TODO enable the list box
            self.lbEnabled_ = 0
        else:
            self.button_.config( text='Disable' )
            # TODO disable the list box
            self.lbEnabled_ = 1

def main():
    myDlg = MyDialog(Tk())
    myDlg.go()

if __name__ == '__main__':
    main()

状態の変更を含むいくつかのことを試しました:

self.listBox_.config( state = DISABLED )

私が見つけたリファレンス ドキュメントでは、これを state 属性で設定できることが示唆されています。

state デフォルトでは、リストボックスは NORMAL 状態です。リストボックスがマウス イベントに応答しないようにするには、このオプションを DISABLED に設定します。

ただし、これを試してみると、次のようになります。

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1345, in __call__
    return self.func(*args)
  File "./example.py", line 24, in onEnableDisable
    self.listBox_.config( state = DISABLED )
  File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1139, in configure
    return self._configure('configure', cnf, kw)
  File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1130, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
TclError: unknown option "-state"

ご覧のとおり、かなり古いバージョン (2.4) の python を使用していますが、これはおそらく役に立たないでしょうが、制御することはできません。何か案は?

4

1 に答える 1

1

あなたが提案したコードは私にとってはうまくいきます(python 2.6、OS-X)。Tkinter実際には、トレースバックから正しいことをしているように見えます。の古いバージョンも使用しているTcl/Tk可能性があります。Python のバージョンを制御できない場合、Tk のバージョンを制御できますか?

于 2012-06-15T14:47:53.063 に答える