在我的代码中有两个按钮-当我点击第一个按钮时,程序会写入一个窗口"home",第二个会写入窗口"search",并在"search(搜索)"下创建搜索栏。我的问题是,当我点击搜索按钮两次(或更多次)时,搜索栏也会创建更多次。我该怎么修?(我总是希望只有一个搜索栏)。
from tkinter import *
class App():
def __init__(self):
self.window = Tk()
self.text=Label(self.window, text="Some text")
self.text.pack()
button_home = Button(self.window, text='Home',command= self.home)
button_home.pack()
button_search = Button(self.window, text='Search', command=self.search)
button_search.pack()
def home(self):
self.text['text'] = 'home'
def search(self):
self.text["text"] = 'search'
meno = StringVar()
m = Entry(self.window, textvariable=meno).pack()
这里所要做的就是添加一个变量,该变量表示应用程序的条目是否已经创建:
class App():
def __init__(self):
self.window = Tk()
self.text=Label(self.window, text="Some text")
self.text.pack()
button_home = Button(self.window, text='Home',command= self.home)
button_home.pack()
button_search = Button(self.window, text='Search', command=self.search)
button_search.pack()
self.has_entry = False
def home(self):
self.text['text'] = 'home'
def search(self):
self.text["text"] = 'search'
if not self.has_entry:
self.meno = StringVar() # NOTE - change meno to self.meno so you can
# access it later as an attribute
m = Entry(self.window, textvariable=self.meno).pack()
self.has_entry = True
更进一步,您可以让主页和搜索按钮控制输入小部件是否真的显示。您可以使用条目的.pack
和.pack_forget
方法来完成此操作:
class App():
def __init__(self):
self.window = Tk()
self.text=Label(self.window, text="Some text")
self.text.pack()
button_home = Button(self.window, text='Home',command= self.home)
button_home.pack()
button_search = Button(self.window, text='Search', command=self.search)
button_search.pack()
self.meno = StringVar()
self.entry = Entry(self.window, textvariable=self.meno)
def home(self):
self.text['text'] = 'home'
self.entry.pack_forget()
def search(self):
self.text["text"] = 'search'
self.entry.pack()
希望这能有所帮助!