如何删除(或去除网格)存储在列表中的 Tkinter GUI 对象 (Python)
How to delete (or de-grid) Tkinter GUI objects stored in a list (Python)
我正在尝试制作一个程序,在 Tkinter 中创建一些随机数量的 GUI 对象并将它们存储在列表中。在这里(在下面的代码中)我有一个 for 循环,它创建随机数量的单选按钮。每次创建单选按钮对象时,它都存储在列表 'GUIobjects' 中。我这样做是因为否则我以后无法访问 GUI 对象。我现在需要知道的是如何删除或取消网格化对象。
我试过 self.radioButton.grid_forget(),但这只会消除最后创建的对象的网格。我不确定是否有办法访问列表中的每个对象并使用 .grid_forget()。如果有,那将是一个选项。
现在我只需要知道如何在创建所有 GUI 对象后删除它们或取消网格化。
from tkinter import *
import random
class App(Tk):
def __init__(self):
Tk.__init__(self)
self.addButton()
def addButton(self)
GUIobjects = []
randInt = random.randint(3, 10)
self.radVar = IntVar()
for x in range(2, randInt):
self.radioButton = Radiobutton(self, text = "Button", variable = self.RadVar, value = x)
self.radioButton.grid(row = x)
print(GUIobjects)
# This is to show that one more object has been created than appears on the screen
self.radioButton.grid_forget()
# This de-grid's the last object created, but I need to de-grid all of them
def main():
a = App()
a.mainloop()
if __name__ == "__main__":
main()
截至目前,我尝试在创建所有对象后立即取消网格化。一旦我找到了如何去除每个对象的网格,我将需要以某种方式制作一个去除它们网格的按钮(与在创建它们之后立即去除它们相比)。这个按钮应该可以放在 'addButtons' 以外的方法中,但仍然在 'App' class.
中
谢谢!
您需要存储对每个对象的引用。创建一个空列表并将引用附加到循环内的列表。
self.radioButtons = []
for x in range(2, randInt):
self.radioButtons.append(Radiobutton(self, text = "Button", variable = self.RadVar, value = x))
self.radioButtons[-1].grid(row = x) # layout the most recent one
除非您也删除引用,否则它们不会被垃圾回收。
for button in self.radioButtons:
button.grid_forget()
del self.radioButtons
我正在尝试制作一个程序,在 Tkinter 中创建一些随机数量的 GUI 对象并将它们存储在列表中。在这里(在下面的代码中)我有一个 for 循环,它创建随机数量的单选按钮。每次创建单选按钮对象时,它都存储在列表 'GUIobjects' 中。我这样做是因为否则我以后无法访问 GUI 对象。我现在需要知道的是如何删除或取消网格化对象。
我试过 self.radioButton.grid_forget(),但这只会消除最后创建的对象的网格。我不确定是否有办法访问列表中的每个对象并使用 .grid_forget()。如果有,那将是一个选项。
现在我只需要知道如何在创建所有 GUI 对象后删除它们或取消网格化。
from tkinter import *
import random
class App(Tk):
def __init__(self):
Tk.__init__(self)
self.addButton()
def addButton(self)
GUIobjects = []
randInt = random.randint(3, 10)
self.radVar = IntVar()
for x in range(2, randInt):
self.radioButton = Radiobutton(self, text = "Button", variable = self.RadVar, value = x)
self.radioButton.grid(row = x)
print(GUIobjects)
# This is to show that one more object has been created than appears on the screen
self.radioButton.grid_forget()
# This de-grid's the last object created, but I need to de-grid all of them
def main():
a = App()
a.mainloop()
if __name__ == "__main__":
main()
截至目前,我尝试在创建所有对象后立即取消网格化。一旦我找到了如何去除每个对象的网格,我将需要以某种方式制作一个去除它们网格的按钮(与在创建它们之后立即去除它们相比)。这个按钮应该可以放在 'addButtons' 以外的方法中,但仍然在 'App' class.
中谢谢!
您需要存储对每个对象的引用。创建一个空列表并将引用附加到循环内的列表。
self.radioButtons = []
for x in range(2, randInt):
self.radioButtons.append(Radiobutton(self, text = "Button", variable = self.RadVar, value = x))
self.radioButtons[-1].grid(row = x) # layout the most recent one
除非您也删除引用,否则它们不会被垃圾回收。
for button in self.radioButtons:
button.grid_forget()
del self.radioButtons