4

これは間違いなく初心者の質問です。Python 2.7 で Tkinter のグリッド レイアウト マネージャーを使用しています。クリックするとリストボックスを非表示にするボタンが必要です。これまでの私のコードは次のとおりです。

from Tkinter import *
root = Tk()
frame = Frame(root)
pyList = ["Eric", "Terry", "Graham", "Terry", "John", "Carol?", "Michael"]
arbList = ['ham', 'spam', 'eggs', 'potatos', 'tots', 'home fries']
pythons = Listbox(frame, width=10, height=5, selectmode=EXTENDED, exportselection=0)
food = Listbox(frame, width=10, height=5, selectmode=EXTENDED, exportselection=0)
def hider():
    if pythons.selection_includes(4):
        food.lower()
    elif pythons.selection_includes(0):
        food.lift()
b2 = Button(frame, text="Hide!", command=hider)
b2.grid(row=2, column=1)
food.grid(row=0, column=1)
pythons.grid(row=1, column=1, pady=10)
frame.grid()

for python in pyList:
        pythons.insert('end', python)

for thing in arbList:
        food.insert('end', thing)


root.mainloop()

残念ながら、これをいじると、リストボックスをフレームの上または下に持ち上げたり下げたりできないというエラーがスローされるようです。これは pack() マネージャーで動作するようになりましたが、grid() では動作しません。

私は何が欠けていますか?

4

2 に答える 2

3

ウィジェットを親の下に下げることはできません。公式 tk docsによると:

aboveThis 引数が省略された場合、コマンドは、重ね順ですべての兄弟よりも上になるようにウィンドウを上げます (兄弟によって隠されることはなく、重なっている兄弟は隠されます)。aboveThis が指定されている場合は、window の兄弟であるか、window の兄弟の子孫であるウィンドウのパス名でなければなりません。この場合、raise コマンドは、window を aboveThis (または window の兄弟である aboveThis の祖先) のすぐ上のスタック順序に挿入します。これにより、ウィンドウが上下する可能性があります。

(NB. tkraiseコマンドは、lift()実際に最下位レベルで呼び出すものです)

必要な効果を得るには、フレームとリストボックスを兄弟にしてから、in_パラメーターを使用してリストボックスをフレーム内にパックします。

food.grid(row=0, column=1, in_=frame)
pythons.grid(row=1, column=1, pady=10, in_=frame)
于 2012-08-08T02:10:04.057 に答える
0

申し訳ありませんが、どちらのバージョンのコードも私には何もしません。ただし、次の変更は機能します。秘訣は、リスト ボックスの親をrootではなく、frameを持ちliftlowerに対して相対的にすることframeです。これは、Tkinter のバージョンが異なるためでしょうか?

from Tkinter import *
root = Tk()
frame = Frame(root)
pyList = ["Eric", "Terry", "Graham", "Terry", "John", "Carol?", "Michael"]
arbList = ['ham', 'spam', 'eggs', 'potatos', 'tots', 'home fries']
pythons = Listbox(root, width=10, height=5, selectmode=EXTENDED, exportselection=0)
food = Listbox(root, width=10, height=5, selectmode=EXTENDED, exportselection=0)
def hider():
    if pythons.selection_includes(4):
        food.lower(frame)
    elif pythons.selection_includes(0):
        food.lift(frame)
b2 = Button(frame, text="Hide!", command=hider)
b2.grid(row=2, column=1)

food.grid(row=0, column=1, in_=frame)
pythons.grid(row=1, column=1, pady=10, in_=frame)
frame.grid()

for python in pyList:
        pythons.insert('end', python)

for thing in arbList:
        food.insert('end', thing)


root.mainloop()
于 2013-07-08T23:15:15.437 に答える