Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改按钮状态_Python_Tkinter_State - Fatal编程技术网

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()