trs*_*ell 2 python user-interface tkinter
我正在寻找一种方法来创建小部件(很可能是标签)令人作呕,但需要注意的是,以后可以将它们删除或解压缩.
我可以很好地生成小部件,但是没有为它们分配名称.我不明白如果可能的话,我会删除某个匿名小部件.
我的第一直觉是动态创建具有稳定约定的变量名称,但这可能会不必要地打开一堆蠕虫.这个想法如下.我希望能够删除某个Button小部件,同时不知道在运行时我将处理多少.谢谢.
from Tkinter import *
import time
import ttk
def onDoubleClick(event):
item = t.selection()
#print "you clicked on", t.item(item,"text")
if (t.item(item,"text")=="Start IO"):
Button2 = Button(frame2,text="Button2",command=but).pack()
def but():
pack_forget()
root=Tk()
root.geometry("800x300")
frame1 = Frame(root)
frame2 = Frame(root)
t=ttk.Treeview(frame1)
t.heading("#0",text="Test steps")
t.insert("",0,"IO",text="IO")
t.insert("IO","end",text="Start")
t.bind("<Double-1>", onDoubleClick)
t.pack()
frame1.pack(side=LEFT)
frame2.pack(side=LEFT)
Run Code Online (Sandbox Code Playgroud)
编辑:我的功能请求无疑是短视的.我的最终目标是并排放置Label小部件和Button,两者都包含测试启动器中的"步骤".单击该按钮将从GUI中删除其自身及其相应的Label.我可以在Button的回调中创建两个小部件并删除其中一个小部件,但是对于pack_forget我认为我需要def一个函数.我相信我的问题在于传递正确的引用def removeStep一个用例如下图所示:.... [如果这可以解决我的RTFM请随时让我知道,我只是找不到它]
测试:制作PB&J
第0步:获取面包[删除步骤]
第1步:涂抹PB [删除步骤]
第2步:涂抹果冻[删除步骤]
您需要将动态创建的小部件存储在列表中.有类似的东西
dynamic_buttons = []
def onDoubleClick(event):
...
button = Button(...)
dynamic_buttons.append(button)
button.pack()
Run Code Online (Sandbox Code Playgroud)
然后,您可以访问要删除的按钮,例如,
dynamic_buttons[0].destroy()
Run Code Online (Sandbox Code Playgroud)
编辑:有关您的用例的更多信息,我可能会这样做
class RemovableTask(Frame):
def __init__(self, master, name, **options):
Frame.__init__(self, master, **options)
lbl = Label(self, text=name)
btn = Button(self, text='Remove step', command=self.destroy)
lbl.grid(row=0, column=0)
btn.grid(row=0, column=1)
Run Code Online (Sandbox Code Playgroud)
然后只需创建名为"步骤0:获取面包"的名称的RemovableTask实例,并将其打包或打包在一列中.其他一切都将自动处理.
您在这里有几个选择。第一个选项是将动态创建的按钮存储在列表中。然后您可以随时添加/删除按钮——并且您可以保留对所有按钮的引用。干净简单。
config第二个选项是在创建按钮(并引用它)后使用该方法来销毁小部件 - 或者至少将其从显示中删除(widget.pack_forget 实际上不会销毁小部件! 它可能会被重新删除) -稍后打包。要真正销毁小部件,您需要调用widget.destroy)...:
import Tkinter as tk
root = tk.Tk()
def add_new():
b = tk.Button(root,text="Click to destroy")
b.pack()
b.config(command=b.pack_forget)
b = tk.Button(root,text="Add_new",command=add_new)
b.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17132 次 |
| 最近记录: |