• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python tkinter Entry控件的焦点移动操作

    话不多说。

    代码片:

    # -*- coding: utf8 -*-
    from tkinter import *
    #####################################
    ###--------------tk----------------
    class App:
        def __init__(self,master):
            frame = Frame(master)
            frame.pack(expand=1)
            self.e1 = Entry(frame) 
            self.e1.pack()   
            self.e2 = Entry(frame) 
            self.e2.pack()   
            
            self.e1.bind("Return>",handlerAdaptor(focus_cg,e2=self.e2))#tk类不能直接传递参数,需要lambda
    def focus_cg(event,e2):
       e2.focus_set() #焦点移到e2
    def handlerAdaptor(fun, **kwds):
    #事件处理函数的适配器,相当于中介,那个event是从那里来的呢,我也纳闷,这也许就是python的伟大之处吧
        return lambda event,fun=fun,kwds=kwds: fun(event, **kwds)
     
    if __name__ == '__main__':
        root = Tk()
        app=App(root)
        root.mainloop()
    

    Tkinter 事件绑定的,参数不能直接传递。全局变量可以使用。

    不使用全局变量的方法:

    self.btn = Button(frame,text=u'OK', command=lambda : handler(v=123))

    事件绑定型:

    self.e1.bind("Return>",handlerAdaptor(focus_cg,e2=self.e2))#tk类不能直接传递参数,需要lambda
    def focus_cg(event,e2):
       e2.focus_set() #焦点移到e2
    def handlerAdaptor(fun, **kwds):
    #事件处理函数的适配器,相当于中介,那个event是从那里来的呢,我也纳闷,这也许就是python的伟大之处吧
        return lambda event,fun=fun,kwds=kwds: fun(event, **kwds)
    

    补充:Python之tkinter 文本框Entry的基本应用

    Entry简介

    所谓的文本框Entry,通常是指单行的文本框,在GUI程序设计中,这是用于输入的最基本控件,我们可以使用它输入单行字符串,如果所输入的字符串长度大于文本框的宽度,所输入的文字会自动隐藏,造成部分内容无法显示,碰到这种状况时可以使用箭头键移动鼠标光标到看不到的区域。

    文本框限定的是单行文字,如果想要处理多行文字,需要使用控件中的text

    它的语法格式:

    Entry(父对象, options, ...)

    第一个参数:父对象,表示这个文本框将建立在哪一个窗口内

    第二个参数:options,参数如下

    参数 含义
    borderwidth 边界宽度 默认是两个像素
    bd 边界宽度 默认是两个像素
    background 背景色彩
    bg 背景色彩
    command 当用户更改内容时,会自动执行此函数
    cursor 当鼠标光标移至按钮上时的形状
    exportselection 如果执行选取时,所选取的字符串会自动输出至剪贴板 如果想要避免,可以设置exportselection=0
    foreground 前景色彩
    fg 前景色彩
    font 字形
    height 高,单位是字符高
    highlightbackground 当功能按钮获取焦点时的背景颜色
    highlightcolor 当工人按钮取得焦点时的颜色
    justify 当有多行文字时,最后一行文字的对齐方式
    relief 可由此控制文字外框 默认是relief=FLAT
    selectbackground 被选取字符串的背景色彩
    selectborderwidth 选取字符串时的边界宽度 预设是1
    selectfroeground 被选取字符串的前景色彩
    show 显示输入字符 例如,show='*'表示显示星号,常用于输入密码字段
    state 输入状态 默认是NORMAL表示可以输入,DISABLE则表示无法输入
    textvariable 文字变量
    width 宽,单位是字符宽
    xscrollcommand 在X轴使用滚动条

    Entry的基本应用

    例子:建立标签和文本框,输入姓名和地址

    import tkinter
    root = tkinter.Tk()
    label1 = tkinter.Label(root, text="姓名 :")
    label2 = tkinter.Label(root, text="住址 :")
    label1.grid(row=0)
    label2.grid(row=1)
    entry1 = tkinter.Entry(root)
    entry2 = tkinter.Entry(root)
    entry1.grid(row=0, column=1)
    entry2.grid(row=1, column=1)
    root.mainloop()
    

    运行结果:

    设置grid(row=0),在没有设置column=x的情况下,系统自动设置column=0

    使用show 参数隐藏输入的字符

    其实Entry控件具有可以使用show参数设置隐藏输入字符的特性,所以也常被应用在用于输入密码的时候

    例子:密码的输入,用*隐藏

    import tkinter
    root = tkinter.Tk()
    label1 = tkinter.Label(root, text="账号 :")
    label2 = tkinter.Label(root, text="密码 :")
    label1.grid(row=0)
    label2.grid(row=1)
    entry1 = tkinter.Entry(root)
    entry2 = tkinter.Entry(root, show="*")
    entry1.grid(row=0, column=1)
    entry2.grid(row=1, column=1)
    root.mainloop()
    

    运行结果:

    Entry 的 get 方法

    Entry 有一个get()方法,可以利用这个方法来获取目前Entry 的字符串内容

    import tkinter
    def getValue():
        print("账号为{}, 密码为{}".format(entry1.get(), entry2.get()))
    root = tkinter.Tk()
    label1 = tkinter.Label(root, text="账号 :")
    label2 = tkinter.Label(root, text="密码 :")
    label1.grid(row=0)
    label2.grid(row=1)
    entry1 = tkinter.Entry(root)
    entry2 = tkinter.Entry(root, show="*")
    entry1.grid(row=0, column=1)
    entry2.grid(row=1, column=1)
    buttonLogin = tkinter.Button(root, text="登录", command=getValue)
    buttonExit = tkinter.Button(root, text="退出", command=root.quit)
    buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20)
    buttonExit.grid(row=2, column=1)
    root.mainloop()
    

    运行结果:

    我们输入账号密码,点击登录

    账号为123456, 密码为132456
    

    控制台就出现了我们所需要的的信息

    Entry 的 insert() 方法

    在设计GUI程序时,常常需要在建立Entry的文本框内默认建立输入文字,在Widget控件中可以使用insert(index, s)方法插入字符串

    其中s是所插入的字符串,字符串会插在index位置

    例子:建立默认文字内容

    import tkinter
    def getValue():
        print("账号为{}, 密码为{}".format(entry1.get(), entry2.get()))
    root = tkinter.Tk()
    label1 = tkinter.Label(root, text="账号 :")
    label2 = tkinter.Label(root, text="密码 :")
    label1.grid(row=0)
    label2.grid(row=1)
    entry1 = tkinter.Entry(root)
    entry2 = tkinter.Entry(root, show="*")
    # 默认账号内容
    entry1.insert(0, "123456")
    # 默认密码内容
    entry2.insert(0, "123456")
    entry1.grid(row=0, column=1)
    entry2.grid(row=1, column=1)
    buttonLogin = tkinter.Button(root, text="登录", command=getValue)
    buttonExit = tkinter.Button(root, text="退出", command=root.quit)
    buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20)
    buttonExit.grid(row=2, column=1)
    root.mainloop()
    

    运行结果:

    Entry 的 delete() 方法

    在tkinter模块的应用中可以使用delete(first, last=None)方法删除Entry内的从第first字符到last-1字符间的字符串,如果要删除整个字符串可以使用delete(0, END)

    如果删除倒数第一个,我们可以用len()方法判断长度,然后长度减一就行

    例子:单击删除按钮清空文本框内容

    import tkinter
    def getValue():
        print("账号为{}, 密码为{}".format(entry1.get(), entry2.get()))
    # 删除的方法
    def deleteValue():
        entry1.delete(0, tkinter.END)
        entry2.delete(0, tkinter.END)
    root = tkinter.Tk()
    label1 = tkinter.Label(root, text="账号 :")
    label2 = tkinter.Label(root, text="密码 :")
    label1.grid(row=0)
    label2.grid(row=1)
    entry1 = tkinter.Entry(root)
    entry2 = tkinter.Entry(root, show="*")
    # 默认账号内容
    entry1.insert(0, "123456")
    # 默认密码内容
    entry2.insert(0, "123456")
    entry1.grid(row=0, column=1)
    entry2.grid(row=1, column=1)
    buttonLogin = tkinter.Button(root, text="登录", command=getValue)
    # 调用删除的方法
    buttonExit = tkinter.Button(root, text="删除", command=deleteValue)
    buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20)
    buttonExit.grid(row=2, column=1)
    root.mainloop()
    

    运行结果:

    例子:删除最后一个

    def deleteValue():
        len_entry = len(entry1.get())
        entry1.delete(len_entry - 1)
        entry2.delete(0, tkinter.END)
    

    运行结果:

    如果只有一个参数的话,那这个参数将是first,如不是last,len_entry - 1相当于是从到底第一个开始删除,一直到末尾

    计算数学表达式使用 eval()

    Python有一个非常好用的计算数学表达式的函数eval

    该函数可以直接传回此数学表达式的计算结果,它的语法格式:

    """expression为字符串"""
    result = eval(expression)
    

    例子:

    import tkinter
    def getValue():
        try:
            value = eval(entry.get())
            label2.configure(text="计算结果为:" + str(value))
        except:
            pass
    root = tkinter.Tk()
    label = tkinter.Label(root, text="请输入数学表达式:")
    label.pack(anchor=tkinter.W)
    entry = tkinter.Entry(root)
    entry.pack(pady=5)
    label2 = tkinter.Label(root)
    label2.pack()
    button = tkinter.Button(root, text="计算", command=getValue)
    button.pack(pady=5)
    root.mainloop()
    

    运行结果:

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • Python tkinter 下拉日历控件代码
    • python中的tkinter库弹窗messagebox详解
    • Python GUI之如何使用tkinter控件
    • python基于tkinter实现gif录屏功能
    • python项目--使用Tkinter的日历GUI应用程序
    上一篇:python3.7.2 tkinter entry框限定输入数字的操作
    下一篇:解决Tkinter中button按钮未按却主动执行command函数的问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python tkinter Entry控件的焦点移动操作 python,tkinter,Entry,控件,的,