2

同じフレームに複数のエントリ/ラベルウィジェットを持つ複数の行と列がある場合、それらの1つだけを選択して、他のウィジェットはそのままにして削除することは可能ですか。

例えば

class Window():
    def __init__(self):
        self.root = Tk()
        self.win1 = Frame(self.root)
        entry1 = Entry(win1, row=1, column=1)
        entry2 = Entry(win1, row=1, column=2)
        label1 = Label(win1, row=1, column=3)

    def main1(self):
        label2 = Label(win1, row=1, column=4)
        labeln = Label(win1, row=1, column=n)

次に、列3以降から削除します。nは乱数である可能性があります。grid_forgetを取得して列数を挿入することは可能ですか?行も可能ですか?

更新:または、 initで作成されたウィンドウに戻って、main1で作成されたウィンドウを削除することは可能ですか(ただし、同じフレームで作成されています)?

ありがとうございました。

4

2 に答える 2

1

grid_removeメソッドとgrid_forgetメソッドを読んでください。これらにより、既存のウィジェットをビューから削除できます。ウィジェットを破棄して、ウィジェットを消滅させることもできます。

これを行ってからしばらく経ちますが(現在、例を作成するためのコンピューターがありません)、1つの厄介な点は、グリッド行を明示的に設定する必要があることだと思います。 /または列の高さ、幅、または重みをゼロに戻して、スペースを再利用します。しかし、それはかなり実行可能です。

もう1つの選択肢は、メソッドまたは関数を介してすべてのウィジェットを作成することです。その後、すべてのウィジェットを非常に簡単に破棄して再作成できます。UI全体が「点滅」するため、これはおそらくユーザーにとって不快なことです。

于 2012-07-06T13:54:12.940 に答える
0

GUI用の動的なPythonコードを作成するためのcshスクリプトを次に示します。

それは何をしますか?

入力

./dynamic_python -label name、age -frame myframe

そして、name、ageという名前の2つのラベル、ラベルごとに2つの入力ボックス、およびその他のウィジェットを作成します。私はそれがあなたが必要としているものではないことを知っていますが、あなたの解決策への可能なアプローチでそれを考慮してください。さらにサポートが必要な場合は、私に連絡してください。他のユーザーのフィードバックに感謝します:)

dynamic_pythonのコード:

#! /bin/csh -f

#echo $argv[1]
#shift
#echo $argv[1]
while ("$#" != 0)
    if("$argv[1]" == "-label") then 
        set label = "$argv[2]"
        shift
        shift
    endif
    if("$argv[1]" == "-frame") then 
        set frame = "$argv[2]"
        shift
        shift
    endif
end
set label = `echo $label | sed 's/,/ /g'`
set lcount = `expr "$#label" + 1`
set lc = 1
#
echo "#! /usr/bin/python" > dy.py
echo "from Tkinter import *" >> dy.py
#
echo "def fun_ok():" >> dy.py
echo "  print 'OK_Accepted'" >> dy.py
set label = `echo $label | sed 's/,/ /g'`
set lcount = `expr "$#label" + 1`
set lc = 1
echo "  list_out = []" >> dy.py
while ($lc != $lcount)
    echo "  print $label[$lc].get()" >> dy.py
    echo "  list_out.append('-$label[$lc]')" >> dy.py
    echo "  list_out.append($label[$lc].get())" >> dy.py
    set lc = `expr "$lc" + 1`
end
echo "  print list_out" >> dy.py
#
echo "$frame = Tk()" >> dy.py
#
set label = `echo $label | sed 's/,/ /g'`
set lcount = `expr "$#label" + 1`
set lc = 1
while ($lc != $lcount)
    echo $lc $label[$lc]
    echo "$label[$lc] = StringVar()" >> dy.py
    echo "Label($frame,text="_$label[$lc]_").grid(row = $lc,column = 1)" | sed 's/_/"/g' >> dy.py
    echo "Entry($frame,textvariable=$label[$lc]).grid(row=$lc,column=2)" >> dy.py
    set lc = `expr "$lc" + 1`
end
echo "Button($frame,text='OK',command=fun_ok).grid(row = $lc,column = 1)" >> dy.py
echo "Button($frame,text='EXIT',command=$frame.quit).grid(row = $lc,column = 2)" >> dy.py
#Button(master, text="OK", command=callback)
#
echo "$frame.mainloop()" >> dy.py
#
chmod 755 *
dy.py
于 2012-07-06T08:33:05.913 に答える