Python 更改按钮状态
我想在填充所有输入字段时将按钮状态更改为正常。请告诉我怎么做。输入注释名称和注释电子邮件后,按钮状态变为正常。当它们为空时,其状态将被禁用。我们可以再增加一个函数吗Python 更改按钮状态,python,tkinter,state,Python,Tkinter,State,我想在填充所有输入字段时将按钮状态更改为正常。请告诉我怎么做。输入注释名称和注释电子邮件后,按钮状态变为正常。当它们为空时,其状态将被禁用。我们可以再增加一个函数吗 from tkinter import * from tkinter import ttk from tkinter import messagebox class Feedback: def __init__(self, mainframe): mainframe.title('Add Your
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
class Feedback:
def __init__(self, mainframe):
mainframe.title('Add Your Comment')
mainframe.resizable(False, False)
mainframe.configure(background='#f7f7f7')
self.style = ttk.Style()
self.style.configure('TFrame', background='#f7f7f7')
self.style.configure('TButton', background='#e1d8b9')
self.style.configure('TLabel', background='#f7f7f7', font=('Arial', 12))
self.style.configure('Header.TLabel', font=('Arial', 18, 'bold'))
self.header_frame = ttk.Frame(mainframe)
self.header_frame.pack()
self.logo = PhotoImage(file='python_logo.gif')
ttk.Label(self.header_frame, image=self.logo).grid(row=0, column=0, rowspan=2)
ttk.Label(self.header_frame, text='Comment App', style='Header.TLabel').grid(row=0, column=1)
ttk.Label(self.header_frame, wraplength=300,
text=(
'Add your name, email, and comment, then click submit to add your comment. Click clear if you make a mistake.')).grid(
row=1, column=1)
self.content_in_frame = ttk.Frame(mainframe)
self.content_in_frame.pack()
ttk.Label(self.content_in_frame, text='Name:').grid(row=0, column=0, padx=5, sticky='sw')
ttk.Label(self.content_in_frame, text='Email:').grid(row=0, column=1, padx=5, sticky='sw')
ttk.Label(self.content_in_frame, text='Comments:').grid(row=2, column=0, padx=5, sticky='sw')
self.comment_name = ttk.Entry(self.content_in_frame, width=24, font=('Arial', 10))
self.comment_email = ttk.Entry(self.content_in_frame, width=24, font=('Arial', 10))
self.comments = Text(self.content_in_frame, width=50, height=10, font=('Arial', 10))
self.comment_name.grid(row=1, column=0, padx=5)
self.comment_email.grid(row=1, column=1, padx=5)
self.comments.grid(row=3, column=0, columnspan=2, padx=5)
ttk.Button(self.content_in_frame, text='Submit',
command=self.submit).grid(row=4, column=0, padx=5, pady=5, sticky='e')
ttk.Button(self.content_in_frame, text='Clear',
command=self.clear).grid(row=4, column=1, padx=5, pady=5, sticky='w')
def submit(self):
print(f'Name: {self.comment_name.get()}')
print(f'Email: {self.comment_email.get()}')
print(f'Comments: {self.comments.get(1.0, "end")}')
self.clear()
messagebox.showinfo(title='Comment info', message='Thanks for your comment!')
def clear(self):
self.comment_name.delete(0, 'end')
self.comment_email.delete(0, 'end')
self.comments.delete(1.0, 'end')
def main():
root = Tk()
root.geometry('500x400')
feedback = Feedback(root)
root.mainloop()
if __name__ == '__main__': main()
禁用开头的按钮,然后使用
Entry.bind(“”,fun)
检查是否有条目。如果有条目,将其恢复到正常状态,否则将恢复到禁用状态
这是您实现的代码
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
class Feedback:
def __init__(self, mainframe):
mainframe.title('Add Your Comment')
mainframe.resizable(False, False)
mainframe.configure(background='#f7f7f7')
self.style = ttk.Style()
self.style.configure('TFrame', background='#f7f7f7')
self.style.configure('TButton', background='#e1d8b9')
self.style.configure('TLabel', background='#f7f7f7', font=('Arial', 12))
self.style.configure('Header.TLabel', font=('Arial', 18, 'bold'))
self.header_frame = ttk.Frame(mainframe)
self.header_frame.pack()
#self.logo = PhotoImage(file='')
#ttk.Label(self.header_frame, image=self.logo).grid(row=0, column=0, rowspan=2)
ttk.Label(self.header_frame, text='Comment App', style='Header.TLabel').grid(row=0, column=1)
ttk.Label(self.header_frame, wraplength=300,
text=(
'Add your name, email, and comment, then click submit to add your comment. Click clear if you make a mistake.')).grid(
row=1, column=1)
self.content_in_frame = ttk.Frame(mainframe)
self.content_in_frame.pack()
ttk.Label(self.content_in_frame, text='Name:').grid(row=0, column=0, padx=5, sticky='sw')
ttk.Label(self.content_in_frame, text='Email:').grid(row=0, column=1, padx=5, sticky='sw')
ttk.Label(self.content_in_frame, text='Comments:').grid(row=2, column=0, padx=5, sticky='sw')
self.comment_name = ttk.Entry(self.content_in_frame, width=24, font=('Arial', 10))
self.comment_email = ttk.Entry(self.content_in_frame, width=24, font=('Arial', 10))
self.comments = Text(self.content_in_frame, width=50, height=10, font=('Arial', 10))
self.comment_name.bind('<Key>', self.state_change)
self.comment_email.bind('<Key>', self.state_change)
self.comment_name.grid(row=1, column=0, padx=5)
self.comment_email.grid(row=1, column=1, padx=5)
self.comments.grid(row=3, column=0, columnspan=2, padx=5)
self.submit = ttk.Button(self.content_in_frame, text='Submit',
command=self.submit)
self.submit.grid(row=4, column=0, padx=5, pady=5, sticky='e')
self.submit['state']='disable'
ttk.Button(self.content_in_frame, text='Clear',
command=self.clear).grid(row=4, column=1, padx=5, pady=5, sticky='w')
def state_change(self, event=None):
if self.comment_name.get() != '' and self.comment_email.get() != '':
self.submit['state'] = 'normal'
else:
self.submit['state'] = 'disable'
def submit(self):
print(f'Name: {self.comment_name.get()}')
print(f'Email: {self.comment_email.get()}')
print(f'Comments: {self.comments.get(1.0, "end")}')
self.clear()
messagebox.showinfo(title='Comment info', message='Thanks for your comment!')
def clear(self):
self.comment_name.delete(0, 'end')
self.comment_email.delete(0, 'end')
self.comments.delete(1.0, 'end')
self.state_change()
def main():
root = Tk()
root.geometry('500x400')
feedback = Feedback(root)
root.mainloop()
if __name__ == '__main__':
main()
我发现了一个问题,如果您在“电子邮件”字段中输入某个内容并将其退格,则该按钮仍保持活动状态,因为您的代码需要按下一个键才能进行更改,如果删除内容后不执行其他按键,则该按钮将不会受到影响。@AST ya您是对的,我已进行了更新
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
class Feedback:
def __init__(self, mainframe):
mainframe.title('Add Your Comment')
mainframe.resizable(False, False)
mainframe.configure(background='#f7f7f7')
self.name = StringVar()
self.email = StringVar()
self.name.trace_add('write', self.state_change)
self.email.trace_add('write', self.state_change)
self.style = ttk.Style()
self.style.configure('TFrame', background='#f7f7f7')
self.style.configure('TButton', background='#e1d8b9')
self.style.configure('TLabel', background='#f7f7f7', font=('Arial', 12))
self.style.configure('Header.TLabel', font=('Arial', 18, 'bold'))
self.header_frame = ttk.Frame(mainframe)
self.header_frame.pack()
#self.logo = PhotoImage(file='')
#ttk.Label(self.header_frame, image=self.logo).grid(row=0, column=0, rowspan=2)
ttk.Label(self.header_frame, text='Comment App', style='Header.TLabel').grid(row=0, column=1)
ttk.Label(self.header_frame, wraplength=300,
text=(
'Add your name, email, and comment, then click submit to add your comment. Click clear if you make a mistake.')).grid(
row=1, column=1)
self.content_in_frame = ttk.Frame(mainframe)
self.content_in_frame.pack()
ttk.Label(self.content_in_frame, text='Name:').grid(row=0, column=0, padx=5, sticky='sw')
ttk.Label(self.content_in_frame, text='Email:').grid(row=0, column=1, padx=5, sticky='sw')
ttk.Label(self.content_in_frame, text='Comments:').grid(row=2, column=0, padx=5, sticky='sw')
self.comment_name = ttk.Entry(self.content_in_frame, textvariable=self.name, width=24, font=('Arial', 10))
self.comment_email = ttk.Entry(self.content_in_frame, textvariable=self.email, width=24, font=('Arial', 10))
self.comments = Text(self.content_in_frame, width=50, height=10, font=('Arial', 10))
#self.comment_name.bind('<Key>', self.state_change)
#self.comment_email.bind('<Key>', self.state_change)
self.comment_name.grid(row=1, column=0, padx=5)
self.comment_email.grid(row=1, column=1, padx=5)
self.comments.grid(row=3, column=0, columnspan=2, padx=5)
self.submit = ttk.Button(self.content_in_frame, text='Submit',
command=self.submit)
self.submit.grid(row=4, column=0, padx=5, pady=5, sticky='e')
self.submit['state']='disable'
ttk.Button(self.content_in_frame, text='Clear',
command=self.clear).grid(row=4, column=1, padx=5, pady=5, sticky='w')
def state_change(self, event=None, *args):
if self.name.get() != '' and self.email.get() != '':
self.submit['state'] = 'normal'
else:
self.submit['state'] = 'disable'
def submit(self):
print(f'Name: {self.comment_name.get()}')
print(f'Email: {self.comment_email.get()}')
print(f'Comments: {self.comments.get(1.0, "end")}')
self.clear()
messagebox.showinfo(title='Comment info', message='Thanks for your comment!')
def clear(self):
self.comment_name.delete(0, 'end')
self.comment_email.delete(0, 'end')
self.comments.delete(1.0, 'end')
self.state_change()
def main():
root = Tk()
root.geometry('500x400')
feedback = Feedback(root)
root.mainloop()
if __name__ == '__main__':
main()