Python—tkinter编程案例

用户登录界面无处不在,例如电子邮箱、QQ、微信等等,这时Python-tkinter库提供了强大的跨平台图形用户界面编程的功能。下面就是一个简单的tkinter库编写的模拟用户登录界面。
首先导入标准库,messagebox提供了对话框,还有commondialog、dialog等等都是提供各种对话框。tkinter.TK创建应用程序创建口。tkinter.Label在窗口上创建书签。书签在窗口上的位置则用.place(x=,y=)来表示。Entry是tkinter中一个常用的组件,就是一个单行文本框。所以输入用户的账号和密码是就需要两个单行的文本框。现在各个登录界面上都会有记住账号密码为了下次登录时方便直接登录,此次案例也有。
如下图所示:

try:
    with open(filename) as fp:
        n,p=fp.read().strip().split(',')
        varName.set(n)
        varPwd.set(p)
except:
    pass
    rememberMe=tkinter.IntVar(root,value=1)
checkRemember=tkinter.Checkbutton(root,
                                  text='Remember me?',
                                  variable=rememberMe,
                                  onvalue=1,
                                  offvalue=0)

为此方便了很多,下次用户再次登录界面时就不用麻烦再次输入账号密码。

处理函数时,tkinter会创建一个按钮组件,也就是Button,也是tkinter经常使用的一个组件。

最后启动消息循环。结果如图所示:

command python tkinter 参数 python tkinter entry_文本框


然后输入原始账号密码,显示登陆成功界面,如图所示:

·······

command python tkinter 参数 python tkinter entry_文本框_02

·····

command python tkinter 参数 python tkinter entry_用户名_03


下面就是此次模拟用户登录界面的源代码:

// import tkinter
import tkinter.messagebox
import os
import os.path
path=os.getenv('temp')
filename=os.path.join(path,'info.txt')

#创建应用程序窗口
root=tkinter.Tk()
#定义窗口大小
root['height']=140
root['width']=200

#在窗口上创建标签组件
labelName=tkinter.Label(root,
                        text='User Name:',
                        justify=tkinter.RIGHT,
                        anchor='e',
                        width=80)
#把组件放置到窗口指定区域
labelName.place(x=10,y=5,width=80,height=20)
#创建字符串变量和文本框组件,同时设置关联的变量
#可以通过关联变量来读取或修改文本框内的文本
varName=tkinter.StringVar(root,value='')
entryName=tkinter.Entry(root,
                         width=80,
                         textvariable=varName)
entryName.place(x=100,y=5,width=80,height=20)

labelpwd=tkinter.Label(root,
                       text='User Pwd:',
                       justify=tkinter.RIGHT,
                       anchor='e',
                       width=80)
labelpwd.place(x=10,y=30,width=80,height=20)

#创建密码文本框
varPwd=tkinter.StringVar(root,value='')
entryPwd=tkinter.Entry(root,
                       show='*',   #不管输入什么都显示星号
                       width=80,
                       textvariable=varPwd)
entryPwd.place(x=100,y=30,width=80,height=20)

#尝试自动填写用户名和密码
try:
    with open(filename) as fp:
        n,p=fp.read().strip().split(',')
        varName.set(n)
        varPwd.set(p)
except:
    pass
#记住我,复选框
rememberMe=tkinter.IntVar(root,value=1)
#选中时变量值为1,未选中时变量值为0,默认选中
checkRemember=tkinter.Checkbutton(root,
                                  text='Remember me?',
                                  variable=rememberMe,
                                  onvalue=1,
                                  offvalue=0)
checkRemember.place(x=30,y=70,width=120,height=20)
#登录按钮事件处理函数
def loign():
    #获取用户名和密码
    name=entryName.get()
    pwd=entryPwd.get()
    if name=='admin' and pwd=='123456':
        tkinter.messagebox.showinfo(title='恭喜',
                                    message='登录成功!')
        if rememberMe.get()==1:
            #把登陆成功的信息写到临时文件中
           with open(filename,'w')as fp:
               fp.write(',',join((name,pwd)))
        else:
            try:
                #删除用户记录用户名和密码的临时文件
                os.remove(filename)
            except:
                pass
    else:
        tkinter.messagebox.showerror('警告',message='用户名或密码错误')
#创建按钮组件,同时设置按钮事件处理函数
buttonOk=tkinter.Button(root,
                        text='Loign',
                        command=loign)
buttonOk.place(x=30,y=100,width=50,height=20)

def cancel():
    #清理用户输入的用户名和密码
    varName.set('')
    varPwd.set('')
buttonCancel=tkinter.Button(root,
                            text='Cancel',
                            command=cancel)
buttonCancel.place(x=90,y=100,width=50,height=20)

#启动消息循环
root.mainloop()