所以我现在使用.place来设置我的小部件的位置。
def printresults():
SClabelspare=Label(cwindow, text ="Please enter the Customers ID Number:" ).place(x=10,y=560)
我想调用另一个会破坏这些小部件的子程序。我相信有一些叫做.destroy()或.place_destroy的东西?我不太确定这些是如何工作的,我试图创建一个看起来像这样的东西:
def destroy_widgets():
SClabelspare.destroy()
但它只会生成一个显示NameError: global name 'SClabelspare' is not defined
任何帮助将不胜感激!
答案 0 :(得分:1)
首先,place()返回None,因此SClabelspare == None不是Tkinter ID。其次它是本地的,当函数退出时也是垃圾收集。您必须保留对象的引用,这可以通过多种方式完成。在进一步研究之前,获得基础知识是一个很好的想法https://wiki.python.org/moin/BeginnersGuide/Programmers此外,在不使用类结构的情况下编写Tkinter应用程序是一种令人沮丧的体验,除非它非常简单。否则你会得到像你这样的错误,并且必须花费大量的时间和精力来克服它们。这是我已经拥有的一个例子,旨在概述该过程。
from Tkinter import *
from functools import partial
class ButtonsTest:
def __init__(self):
self.top = Tk()
self.top.title("Click a button to remove")
Label(self.top, text="Click a button to remove it",
bg="lightyellow").grid(row=0)
self.top_frame = Frame(self.top, width =400, height=400)
self.button_dic = {}
self.buttons()
self.top_frame.grid(row=1, column=0)
Button(self.top_frame, text='Exit', bg="orange",
command=self.top.quit).grid(row=10,column=0, columnspan=5)
self.top.mainloop()
##-------------------------------------------------------------------
def buttons(self):
b_row=1
b_col=0
for but_num in range(1, 11):
## create a button and send the button's number to
## self.cb_handler when the button is pressed
b = Button(self.top_frame, text = str(but_num),
command=partial(self.cb_handler, but_num))
b.grid(row=b_row, column=b_col)
## dictionary key=button number --> button instance
self.button_dic[but_num] = b
b_col += 1
if b_col > 4:
b_col = 0
b_row += 1
##----------------------------------------------------------------
def cb_handler( self, cb_number ):
print "\ncb_handler", cb_number
self.button_dic[cb_number].grid_forget()
##===================================================================
BT=ButtonsTest()
答案 1 :(得分:0)
或者,如果假设非常简单,没有很多难以管理的全局变量,并且如果类结构只会引入不必要的复杂性,那么你可能会尝试这样的事情(它在命令行的python3解释器中对我有用):
from tkinter import *
root = Tk()
def victim():
global vic
vic = Toplevel(root)
vicblab = Label(vic, text='Please bump me off')
vicblab.grid()
def bumper():
global vic
bump = Toplevel(root)
bumpbutt = Button(bump, text='Bump off', command=vic.destroy)
bumpbutt.grid()
victim()
bumper()