删除网格中的某些行/列

2024-10-01 04:56:23 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我在同一个框架中有多个行和列,并且有几个条目/标签小部件,那么是否可以只选择其中一个并删除它,而不影响其他部件呢。在

例如

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忘记并插入列数?行也可以吗?在

更新:或者可以简单地返回到在init下创建的窗口并删除在main1下创建的窗口(但是已经在同一个框架中创建)吗?在

谢谢。在


Tags: self框架init部件def条目columnroot
2条回答

下面是一个csh脚本,用于为GUI创建动态python代码。在

它的作用是什么?

进入

./dynamic_python -label name,age -frame myframe

它将创建2个名为name,age的标签,为每个标签和其他一些小部件创建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

阅读grid_remove和grid_forget方法;这些方法将允许您从视图中删除现有的小部件。您也可以销毁小部件,使其消失。在

我做这个已经有一段时间了(而且目前还没有一台计算机来创建一个示例),但是我认为一个棘手的问题可能是您必须进入并显式地将网格行和/或列的高度、宽度或权重设置回零以回收空间。不过,这是相当可行的。在

您的另一个选择是通过一个方法或函数来创建所有的小部件。然后您可以非常容易地销毁和重新创建所有的小部件。这对用户来说可能不太愉快,因为整个用户界面都会“闪烁”。在

相关问题 更多 >