Python的GUI编程小实例(Tkinter模块)(上)

最近一段时间一直在学习python的GUI编程部分,也算有了一点成果,举两个小实例如下: 

(一)登录页面的源代码:

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
#Remember me 复选框
rememberMe = tkinter.IntVar(root,value=1)
checkRemember = tkinter.Checkbutton(root,text='Remember me?',variable=rememberMe,onvalue=1,offvalue=0)
checkRemember.place(x=30,y=70,width=120,height=20)
#登录按钮事件处理函数
def login():
    #获取用户名和密码
    name = entryName.get()
    pwd = entryPwd.get()
    if name == 'HMCe' and pwd == '20011022':
        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='Login',command=login)
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()

运行结果如下:

(二)简易计算器的源代码:

import re
import tkinter
import tkinter.messagebox

root = tkinter.Tk()

root.geometry('300x270+400+100')

root.resizable(False, False)

root.title('简易计算器——小胡')

contentVar = tkinter.StringVar(root, '')
contentEntry = tkinter.Entry(root, textvariable=contentVar)
contentEntry['state'] = 'readonly'
contentEntry.place(x=10, y=10, width=280, height=20)


def buttonClick(btn):
    content = contentVar.get()

    if content.startswith('.'):
        content = '0' + content

    if btn in '0123456789':
        content += btn
    elif btn == '.':
        lastPart = re.split(r'\+|-|\*|/]', content)[-1]
        if '.' in lastPart:
            tkinter.messagebox.showerror('错误', '小数点太多了')
            return
        else:
            content += btn
    elif btn == 'C':
        content = ''
    elif btn == '=':
        try:
            content = str(eval(content))
        except:
            tkinter.messagebox.showerror('错误', '表达式错误')
            return
    elif btn in operators:
        if content.endswith(operators):
            tkinter.messagebox.showerror('错误', '不允许存在连续运算符')
            return
        content += btn
    elif btn == 'Sqrt':
        n = content.split('.')
        if all(map(lambda x: x.isdigit(), n)):
            content = eval(content) ** 0.5
        else:
            tkinter.messagebox.showerror('错误', '表达式错误')
            return

    contentVar.set(content)


btnClear = tkinter.Button(root, text='Clear', command=lambda: buttonClick('C'))
btnClear.place(x=40, y=40, width=80, height=20)
btnCompute = tkinter.Button(root, text='=', command=lambda: buttonClick('='))
btnCompute.place(x=170, y=40, width=80, height=20)

digits = list('0123456789.') + ['Sqrt']
index = 0
for row in range(4):
    for col in range(3):
        d = digits[index]
        index += 1
        btnDigit = tkinter.Button(root, text=d, command=lambda x=d: buttonClick(x))
        btnDigit.place(x=20 + col * 70, y=80 + row * 50, width=50, height=20)

operators = ('+', '-', '*', '/', '**', '//')
for index, operator in enumerate(operators):
    btnOperator = tkinter.Button(root, text=operator, command=lambda x=operator: buttonClick(x))
    btnOperator.place(x=230, y=80 + index * 30, width=50, height=20)

root.mainloop()

运行结果如下:

      这两个小实例算是入门级别的GUI编程基础训练,建议初学者可以先行尝试这两个实例,之后再尝试其他的典型实例,其他的典型事例见Python的GUI编程小实例(Tkinter模块)(下)。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值