Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 在Tkinter中输入键绑定_Python_User Interface_Tkinter_Button - Fatal编程技术网

Python 在Tkinter中输入键绑定

Python 在Tkinter中输入键绑定,python,user-interface,tkinter,button,Python,User Interface,Tkinter,Button,所以,我一直在尝试绑定enter键来按下这个python程序中的按钮——是的,我已经看到了许多其他与此相关的问题,但是他们的代码都没有因为任何原因与这个程序一起工作。张贴下面的代码,看看是否有人有一个好的解决方案 下面的代码按预期完成了所有操作——它将调出GUI,显示goofy jar图片、按钮和带有预填充文本的输入字段,但键盘上的enter键不会产生结果,因为我用鼠标按下按钮时会发生这种情况 import tkinter as tk from PIL import Image, ImageTk

所以,我一直在尝试绑定enter键来按下这个python程序中的按钮——是的,我已经看到了许多其他与此相关的问题,但是他们的代码都没有因为任何原因与这个程序一起工作。张贴下面的代码,看看是否有人有一个好的解决方案

下面的代码按预期完成了所有操作——它将调出GUI,显示goofy jar图片、按钮和带有预填充文本的输入字段,但键盘上的enter键不会产生结果,因为我用鼠标按下按钮时会发生这种情况

import tkinter as tk
from PIL import Image, ImageTk, ImageTransform
from tkinter.filedialog import askopenfile

root = tk.Tk()


class guiMenu:
    def __init__(self, master):
        myFrame = tk.Frame(master)

        # logo

        logo = Image.open('jar.jpg')
        logo2 = logo.resize((200, 200), Image.ANTIALIAS)
        logo2 = ImageTk.PhotoImage(logo2)
        self.logo_label = tk.Label(image=logo2)
        self.logo_label.image = logo2
        self.logo_label.grid(column=1, row=0)

        # instructions
        self.instructions = tk.Label(master,
                                     text="Input your email address and password to extract email attachments.\n "
                                          "You should also select the folder you wish the attachments to reach.")
        self.instructions.grid(columnspan=3, column=0, row=3)

        # store the user login info in variables
        def storeUserLogin():
            clientEmailInput = self.emailEntry.get()
            clientPasswordInput = self.passwordEntry.get()
            print(clientEmailInput, clientPasswordInput)

        # delete email prefill on click
        def onEmailClick(event):
            self.emailEntry.configure()
            self.emailEntry.delete(0, 100)  # this deletes the preexisting text for email entry
            self.emailEntry.unbind('<Button-1>', self.on_click_id)

        # delete pw prefill on click
        def onPWClick(event):
            self.passwordEntry.configure()
            self.passwordEntry.delete(0, 100)  # this deletes the preexisting text for email entry
            self.passwordEntry.unbind('<Button-1>', self.on_click_id2)

        # email entry box
        self.emailEntry = tk.Entry(master, width=50)
        # emailEntry = tk.StringVar(None)
        # emailEntry.set("Email Address")
        self.emailEntry = tk.Entry()
        self.emailEntry.insert(0, "Email Address")
        self.emailEntry.configure()
        self.emailEntry.grid(column=1, row=1)

        # on-click function
        self.on_click_id = self.emailEntry.bind('<Button-1>', onEmailClick)

        # enter key function
        def enterFunction(event=None):
            master.bind('<Return>', lambda event=None, loginButton.invoke())

        # password entry box

        self.passwordEntry = tk.Entry()
        self.passwordEntry.insert(0, "Password")
        self.passwordEntry.grid(column=1, row=2)

        # on click function
        self.on_click_id2 = self.passwordEntry.bind('<Button-1>', onPWClick)

        # button to login
        def loginButton():
            self.loginButtonText = tk.StringVar()
            self.loginButton = tk.Button(master, textvariable=self.loginButtonText, font="Arial",
                                         commands=lambda: [storeUserLogin(), enterFunction()],
                                         width=5, height=2,
                                         bg="white", fg="black")
            self.loginButtonText.set("LOGIN")
            self.loginButton.grid(column=1, row=4)

        self.canvas = tk.Canvas(root, width=600, height=250)
        self.canvas.grid(columnspan=3)


g = guiMenu(root)
root.mainloop()
将tkinter作为tk导入
从PIL导入图像、ImageTk、ImageTransform
从tkinter.filedialog导入askopenfile
root=tk.tk()
类GUI菜单:
定义初始(自我,主):
myFrame=tk.Frame(主)
#标志
logo=Image.open('jar.jpg')
logo2=logo.resize((200200),Image.ANTIALIAS)
logo2=ImageTk.PhotoImage(logo2)
self.logo\u label=tk.label(图像=logo2)
self.logo\u label.image=logo2
self.logo\u label.grid(列=1,行=0)
#指示
自我说明=传统标签(主标签、,
text=“输入您的电子邮件地址和密码以提取电子邮件附件。\n”
“您还应选择希望附件访问的文件夹。”)
self.instructions.grid(columnspan=3,column=0,row=3)
#将用户登录信息存储在变量中
def storeUserLogin():
clientEmailInput=self.emailEntry.get()
clientPasswordInput=self.passwordEntry.get()
打印(ClientMailInput、clientPasswordInput)
#单击“删除电子邮件预填充”
def onEmailClick(事件):
self.emailEntry.configure()
self.emailEntry.delete(01100)#这会删除先前存在的电子邮件条目文本
self.emailEntry.unbind(“”,self.on\u单击\u id)
#单击“删除pw预填充”
def onPWClick(事件):
self.passwordEntry.configure()
self.passwordEntry.delete(01100)#这将删除电子邮件条目中先前存在的文本
self.passwordEntry.unbind(“”,self.on\u单击\u id2)
#电子邮件输入框
self.emailEntry=tk.Entry(主,宽度=50)
#emailEntry=tk.StringVar(无)
#emailEntry.set(“电子邮件地址”)
self.emailEntry=tk.Entry()
self.emailEntry.insert(0,“电子邮件地址”)
self.emailEntry.configure()
self.emailEntry.grid(列=1,行=1)
#点击功能
self.on\u click\u id=self.emailEntry.bind(“”,onEmailClick)
#输入键功能
def enterFunction(事件=无):
master.bind(“”,lambda event=None,loginButton.invoke())
#密码输入框
self.passwordEntry=tk.Entry()
self.passwordEntry.insert(0,“密码”)
self.passwordEntry.grid(列=1,行=2)
#点击功能
self.on\u click\u id2=self.passwordEntry.bind(“”,onPWClick)
#按钮登录
def loginButton():
self.loginbuttonext=tk.StringVar()
self.loginButton=tk.Button(master,textvariable=self.loginButtonText,font=“Arial”,
commands=lambda:[storeUserLogin(),enterFunction()],
宽度=5,高度=2,
bg=“白色”,fg=“黑色”)
self.loginbuttonext.set(“登录”)
self.loginButton.grid(列=1,行=4)
self.canvas=tk.canvas(根,宽度=600,高度=250)
self.canvas.grid(columnspan=3)
g=GUI菜单(根目录)
root.mainloop()

您正在将登录按钮函数绑定到另一个从未调用过的函数中,并且您在这里编写的OOP错误。您不应该在init函数中定义函数。我不擅长解释,但我希望这会有所帮助。我在代码中也写了原因,在代码中我更改了代码

import tkinter as tk
from PIL import Image, ImageTk, ImageTransform
from tkinter.filedialog import askopenfile

root = tk.Tk()


class guiMenu:
    def __init__(self, master):
        #definr master in Class so we can use it from entire class
        self.master = master
        myFrame = tk.Frame(master)

        # logo

        logo = Image.open('Spitball\Spc.jpg')
        logo2 = logo.resize((200, 200), Image.ANTIALIAS)
        logo2 = ImageTk.PhotoImage(logo2)
        self.logo_label = tk.Label(image=logo2)
        self.logo_label.image = logo2
        self.logo_label.grid(column=1, row=0)
        
        #Create Email Entry box (we are creating Email and Password entry box when class is initialize)
        self.emailEntry = tk.Entry(master, width=50)
        self.emailEntry.insert(0, "Email Address")
        # emailEntry = tk.StringVar(None)
        # emailEntry.set("Email Address")
        # self.emailEntry = tk.Entry() # You should not create two entry boxes with same name
        # self.emailEntry.configure() # We dont need to configure email entry here 

        #Create Password Entry box (we are creating Email and Password entry box when class is initialize)

        self.passwordEntry = tk.Entry()
        self.passwordEntry.insert(0, "Password")
        
        #Grid the email and password entry box.Here email entry box will display first beacuse we grid it first.
        self.emailEntry.grid(column=1, row=1)
        self.passwordEntry.grid(column=1, row=2)

        # instructions
        self.instructions = tk.Label(master,
                                     text="Input your email address and password to extract email attachments.\n "
                                          "You should also select the folder you wish the attachments to reach.")
        self.instructions.grid(columnspan=3, column=0, row=3)

        #Create Login Button 
        self.loginButtonText = tk.StringVar()
        self.loginButton = tk.Button(self.master, textvariable=self.loginButtonText, font="Arial",
                                    command=self.storeUserLogin,
                                    width=5, height=2,
                                    bg="white", fg="black")

        # I dont see here the use of Canvas so i commented out it. 
        # self.canvas = tk.Canvas(self.master, width=600, height=250)

        # on-click function
        self.on_click_id = self.emailEntry.bind('', self.onEmailClick)


        # on click function
        self.on_click_id2 = self.passwordEntry.bind('', self.onPWClick)

        #Bind enter key with loginButtonFunc
        self.master.bind('',self.loginButtonFunc)


    def storeUserLogin(self):
        # store the user login info in variables
        clientEmailInput = self.emailEntry.get()
        clientPasswordInput = self.passwordEntry.get()
        print(clientEmailInput, clientPasswordInput)

        # delete email prefill on click
    def onEmailClick(self,event):
        self.emailEntry.configure()
        self.emailEntry.delete(0, 100)  # this deletes the preexisting text for email entry
        self.emailEntry.unbind('', self.on_click_id)

        # delete pw prefill on click
    def onPWClick(self,event):
        self.passwordEntry.configure()
        self.passwordEntry.delete(0, 100)  # this deletes the preexisting text for email entry
        self.passwordEntry.unbind('', self.on_click_id2)

        # button to login
    def loginButtonFunc(self,event=None):
 
        self.loginButtonText.set("LOGIN")
        self.loginButton.grid(column=1, row=4,pady=5)

        # self.canvas.grid(columnspan=3)


g = guiMenu(root)
root.mainloop()

您正在将登录按钮函数绑定到另一个从未调用过的函数中,并且您在这里编写的OOP错误。您不应该在init函数中定义函数。我不擅长解释,但我希望这会有所帮助。我在代码中也写了原因,在代码中我更改了代码

import tkinter as tk
from PIL import Image, ImageTk, ImageTransform
from tkinter.filedialog import askopenfile

root = tk.Tk()


class guiMenu:
    def __init__(self, master):
        #definr master in Class so we can use it from entire class
        self.master = master
        myFrame = tk.Frame(master)

        # logo

        logo = Image.open('Spitball\Spc.jpg')
        logo2 = logo.resize((200, 200), Image.ANTIALIAS)
        logo2 = ImageTk.PhotoImage(logo2)
        self.logo_label = tk.Label(image=logo2)
        self.logo_label.image = logo2
        self.logo_label.grid(column=1, row=0)
        
        #Create Email Entry box (we are creating Email and Password entry box when class is initialize)
        self.emailEntry = tk.Entry(master, width=50)
        self.emailEntry.insert(0, "Email Address")
        # emailEntry = tk.StringVar(None)
        # emailEntry.set("Email Address")
        # self.emailEntry = tk.Entry() # You should not create two entry boxes with same name
        # self.emailEntry.configure() # We dont need to configure email entry here 

        #Create Password Entry box (we are creating Email and Password entry box when class is initialize)

        self.passwordEntry = tk.Entry()
        self.passwordEntry.insert(0, "Password")
        
        #Grid the email and password entry box.Here email entry box will display first beacuse we grid it first.
        self.emailEntry.grid(column=1, row=1)
        self.passwordEntry.grid(column=1, row=2)

        # instructions
        self.instructions = tk.Label(master,
                                     text="Input your email address and password to extract email attachments.\n "
                                          "You should also select the folder you wish the attachments to reach.")
        self.instructions.grid(columnspan=3, column=0, row=3)

        #Create Login Button 
        self.loginButtonText = tk.StringVar()
        self.loginButton = tk.Button(self.master, textvariable=self.loginButtonText, font="Arial",
                                    command=self.storeUserLogin,
                                    width=5, height=2,
                                    bg="white", fg="black")

        # I dont see here the use of Canvas so i commented out it. 
        # self.canvas = tk.Canvas(self.master, width=600, height=250)

        # on-click function
        self.on_click_id = self.emailEntry.bind('', self.onEmailClick)


        # on click function
        self.on_click_id2 = self.passwordEntry.bind('', self.onPWClick)

        #Bind enter key with loginButtonFunc
        self.master.bind('',self.loginButtonFunc)


    def storeUserLogin(self):
        # store the user login info in variables
        clientEmailInput = self.emailEntry.get()
        clientPasswordInput = self.passwordEntry.get()
        print(clientEmailInput, clientPasswordInput)

        # delete email prefill on click
    def onEmailClick(self,event):
        self.emailEntry.configure()
        self.emailEntry.delete(0, 100)  # this deletes the preexisting text for email entry
        self.emailEntry.unbind('', self.on_click_id)

        # delete pw prefill on click
    def onPWClick(self,event):
        self.passwordEntry.configure()
        self.passwordEntry.delete(0, 100)  # this deletes the preexisting text for email entry
        self.passwordEntry.unbind('', self.on_click_id2)

        # button to login
    def loginButtonFunc(self,event=None):
 
        self.loginButtonText.set("LOGIN")
        self.loginButton.grid(column=1, row=4,pady=5)

        # self.canvas.grid(columnspan=3)


g = guiMenu(root)
root.mainloop()

绑定代码在
enterFunction()
中,您的代码中从未调用过它。绑定代码在
enterFunction()
中,您的代码中从未调用过它。非常感谢——我今晚回家后将测试此代码并实现一些更改。测试中可能有很多垃圾代码,这就是为什么我把其他画布和其他东西放在一起的原因。无论如何,非常感谢你!不客气。很高兴能提供帮助。非常感谢——今晚回家后,我将测试此代码并实现一些更改。测试中可能有很多垃圾代码,这就是为什么我把其他画布和其他东西放在一起的原因。无论如何,非常感谢你!不客气。很乐意帮忙。