脚本应打开一个带有两个可见按钮的应用程序。按下“ Hello”按钮后,新的按钮将并入第1行,“ Hello”按钮将被停用。按下此新按钮后,应将自己从网格中删除,然后重新激活hello按钮,但不会这样做。
请选中video以查看其操作。
已修改代码以评论建议
from tkinter import *
class Application(Frame):
def __init__(self, master=None):
self.master = master
self.master.geometry('300x100+10+10')
Frame.__init__(self, master)
self.pack()
self.createWidgets()
def new_button(self):
print("enable_b")
self.hi_there.config(state=ACTIVE)
self.new_button.grid_remove()
def say_hi(self):
print("hi there, everyone!")
self.new_button = Button(self)
self.new_button.config(text = "New BTN", command=self.new_button)
self.new_button.grid(row=1,column=0)
self.hi_there.config(state=DISABLED)
def createWidgets(self):
self.QUIT = Button(self)
self.QUIT.config(text="QUIT",fg="red",command=self.quit)
self.QUIT.grid(row=0,column=1)
self.hi_there = Button(self)
self.hi_there["text"] = "Hello",
self.hi_there["command"] = self.say_hi
self.hi_there.grid(row=0,column=0)
def quit(self):
self.master.destroy()
def testit():
root = Tk()
app = Application(master=root)
app.mainloop()
if __name__ == '__main__':
testit()
答案 0 :(得分:2)
最初,Log internal note
是指一种方法。然后,您执行以下操作:
self.new_button
该效果将删除该方法,并用按钮小部件本身替换它。
此外,您永远不会将命令分配给新按钮,因此单击它不会导致任何调用。
答案 1 :(得分:1)
您的程序在技术上将在Bryan的答案中提到的2个更正的地方工作得很好,我不确定为什么您要花所有额外的精力为每个字段配置小部件。创建窗口小部件时,您可以完成所有配置。
那就是说,您还可以更改一些内容,以使代码更简洁,并且进行1项更改,我认为真正需要做的是如何从网格中删除new_button
。当您执行grid_remove()
时,这只会使小部件脱离屏幕,而不会摆脱小部件。然后,下次您按下say_hi
按钮时,您将最终创建一个新按钮,而旧按钮仍然存在。相反,我想我会在按钮上使用destroy()
,然后让say_hi
重新创建它。
请参阅此修订版代码。您将了解创建小部件时配置所有东西的意思,并且您无需编写自己的退出函数,只需在退出按钮命令中进行self.master.destroy
。
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master = master
self.master.geometry('300x100+10+10')
self.create_widgets()
def new_btn(self):
print("enable_b")
self.hi_there.config(state="active")
self.new_button.destroy()
def say_hi(self):
print("hi there, everyone!")
self.new_button = tk.Button(self, text="New BTN", command=self.new_btn)
self.new_button.grid(row=1, column=0)
self.hi_there.config(state="disabled")
def create_widgets(self):
tk.Button(self, text="QUIT", fg="red", command=self.master.destroy).grid(row=0,column=1)
self.hi_there = tk.Button(self, text="Hello", command=self.say_hi)
self.hi_there.grid(row=0, column=0)
if __name__ == '__main__':
root = tk.Tk()
app = Application(master=root).pack()
root.mainloop()