从tkin中的不同子例程销毁小部件

2024-10-01 22:37:42 发布

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

所以我现在使用.place来设置我的小部件的位置。在

def printresults():
    SClabelspare=Label(cwindow, text ="Please enter the Customers ID Number:" ).place(x=10,y=560)

我希望调用另一个子程序来销毁这些小部件。我相信有一种东西叫做.destroy()或.place\u destroy?但我不太确定这些是如何工作的,我已经尝试创建了一个看起来像这样的:

^{pr2}$

但它只会产生一个错误代码NameError: global name 'SClabelspare' is not defined

任何帮助都将不胜感激!在


Tags: thetextidnumber部件defplacelabel
2条回答

或者,如果假设非常简单,没有太多难以管理的全局变量,并且类结构只会引入不必要的复杂性,那么您可以尝试这样的方法(在命令行的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()

首先,place()返回None,因此SClabelspare==None不是Tkinter ID;其次,它是本地的,因此当函数退出时,垃圾回收也是如此。你必须保留对对象的引用,这可以通过多种方式实现。Python教程是一个很好的主意,在您进一步研究之前先了解基础知识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()

相关问题 更多 >

    热门问题