五分钟教你玩儿转tkinter(一看就懂)

简介: Python的标准Tk GUI工具包的接口Tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口。Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以通过ttk实现本地窗口风格,并良好地运行在绝大多数平台中。此外,tkinter.tix提供了更丰富的窗口组件。

下载tkinter模块

tkinter其实应该是python自带的模块,没有的朋友可以将下面的pip命令复制到cmd执行:

pip install tkinter

模块导入

from tkinter import *
root = Tk()
root.title('我的第一个Python窗体')
root.geometry('300x240')
root.mainloop()

说明一下,上面的 root.geometry('240x240') 中的 x 既不是乘号,也不是*,它是英文小写字母x。运行以上代码后就会的到下图中的tkinter窗体界面。

tkinter控件

tkinter总共有20个控件,表格如下,请大家详细阅读:

做小项目学tkinter

实现内容

tkinter库实现用户的注册和登录。

实现思路

注册-持久化保存注册信息-登录。

准备工作

1.PyCharm IDE(一个好的编译器是任何项目都必备的,不反对使用Visual Studio Code。)

2.一张命名为“Background_picture.jpg”的图片,不反对将其命名为“背景图片.jpg”,毕竟相较之下还是“Background_picture.jpg”高大上。

3.PIL、tkinter、pickle模块。

这张是我准备的图片,大家可以拿去用。

项目结构

上图的 usrs_info.pickle 是注册成功后储存用户信息的加密的文件,不用准备。

代码部分

留了部分注释,快把代码放到编译器上运行一遍

# @Time      : 2022/8/11 14:10
# @Author    : 热爱科技的刘同学
# @FileName  : login.py
import tkinter as tk
import pickle
import tkinter.messagebox
from PIL import Image, ImageTk
# 设置窗口---最开始的母体窗口
window = tk.Tk()  # 建立一个窗口
window.title('欢迎登录')
window.geometry('450x300')
# 画布
canvas = tk.Canvas(window, height=300, width=450)
# 加载图片
im = Image.open("Background_picture.jpg")
image_file = ImageTk.PhotoImage(im)
image = canvas.create_image(0, 0, anchor='nw', image=image_file)
canvas.pack(side='top')
# 两个文字标签,用户名和密码两个部分
tk.Label(window, text='用户名').place(x=100, y=150)
tk.Label(window, text='密  码').place(x=100, y=190)
var_usr_name = tk.StringVar()  # 讲文本框的内容,定义为字符串类型
var_usr_name.set('123456789@qq.com')  # 设置默认值
var_usr_pwd = tk.StringVar()
# 第一个输入框-用来输入用户名的。
# textvariable 获取文本框的内容
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=160, y=150)
# 第二个输入框-用来输入密码的。
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=160, y=190)
def usr_login():
    usr_name = var_usr_name.get()
    usr_pwd = var_usr_pwd.get()
    try:
        with open('usrs_info.pickle', 'rb') as usr_file:
            usrs_info = pickle.load(usr_file)
    except FileNotFoundError:
        with open('usrs_info.pickle', 'wb') as usr_file:
            usrs_info = {'admin': 'admin'}
            pickle.dump(usrs_info, usr_file)
    if usr_name in usrs_info:
        if usr_pwd == usrs_info[usr_name]:
            tk.messagebox.showinfo(
                title='欢迎光临', message=usr_name + ':!登陆成功,发现你走进了!')
        else:
            tk.messagebox.showinfo(message='错误提示:密码不对,请重试')
    else:
        is_sign_up = tk.messagebox.askyesno('提示', '你还没有注册,请先注册')
        print(is_sign_up)
        if is_sign_up:
            usr_sign_up()
# 注册按钮
def usr_sign_up():
    def sign_to_Mofan_Python():
        np = new_pwd.get()
        npf = new_pwd_confirm.get()
        nn = new_name.get()
        # 上面是获取数据,下面是查看一下是否重复注册过
        with open('users_info.pickle', 'rb') as usr_file:
            exist_usr_info = pickle.load(usr_file)
            if np != npf:
                tk.messagebox.showerror('错误提示', '密码和确认密码必须一样')
            elif nn in exist_usr_info:
                tk.messagebox.showerror('错误提示', '用户名早就注册了!')
            else:
                exist_usr_info[nn] = np
                with open('users_info.pickle', 'wb') as usr_file:
                    pickle.dump(exist_usr_info, usr_file)
                tk.messagebox.showinfo('欢迎', '你已经成功注册了')
                window_sign_up.destroy()
    # 点击注册之后,会弹出这个窗口界面。
    window_sign_up = tk.Toplevel(window)
    window_sign_up.title('欢迎注册')
    window_sign_up.geometry('360x200')  # 中间是x,而不是*号
    # 用户名框--这里输入用户名框。
    new_name = tk.StringVar()
    new_name.set('123456789@qq.com')  # 设置的是默认值
    tk.Label(window_sign_up, text='用户名').place(x=10, y=10)
    entry_new_name = tk.Entry(window_sign_up, textvariable=new_name)
    entry_new_name.place(x=100, y=10)
    # 新密码框--这里输入注册时候的密码
    new_pwd = tk.StringVar()
    tk.Label(window_sign_up, text='密  码').place(x=10, y=50)
    entry_usr_pwd = tk.Entry(window_sign_up, textvariable=new_pwd, show='*')
    entry_usr_pwd.place(x=100, y=50)
    # 密码确认框
    new_pwd_confirm = tk.StringVar()
    tk.Label(window_sign_up, text='确认密码').place(x=10, y=90)
    entry_usr_pwd_confirm = tk.Entry(
        window_sign_up, textvariable=new_pwd_confirm, show='*')
    entry_usr_pwd_confirm.place(x=100, y=90)
    btn_confirm_sign_up = tk.Button(
        window_sign_up, text=' 注  册 ', command=sign_to_Mofan_Python)
    btn_confirm_sign_up.place(x=120, y=130)
# 创建注册和登录按钮
btn_login = tk.Button(window, text=' 登  录 ', command=usr_login)
btn_login.place(x=150, y=230)  # 用place来处理按钮的位置信息。
btn_sign_up = tk.Button(window, text=' 注  册 ', command=usr_sign_up)
btn_sign_up.place(x=250, y=230)
window.mainloop()

💕Final~

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,bye~

相关文章
|
7月前
|
算法 程序员 C#
程序员也可以很浪漫!这样的一款表白代码收藏馆项目,即使小白也可以使用,发给你的对象试试!
程序员也可以很浪漫!这样的一款表白代码收藏馆项目,即使小白也可以使用,发给你的对象试试!
113 0
|
Python
送给她最最浪漫的表白(Python代码实现)
送给她最最浪漫的表白(Python代码实现)
150 0
|
数据采集 XML 人工智能
|
Python
python植物大战僵尸十九之僵尸吃坚果
python植物大战僵尸十九之僵尸吃坚果
87 0
|
数据采集 安全 网络协议
Python3,40行代码写了一个防查岗神器,晚上摸鱼再也不怕老婆查岗了!!
Python3,40行代码写了一个防查岗神器,晚上摸鱼再也不怕老婆查岗了!!
38113 1
Python3,40行代码写了一个防查岗神器,晚上摸鱼再也不怕老婆查岗了!!
|
SQL 存储 监控
聊聊那些年遇到过的奇葩代码
无论是开发新需求还是维护旧平台,在工作的过程中我们都会接触到各种样式的代码,有时候会碰到一些优秀的代码心中不免肃然起敬,但是更多的时候我们会遇到很多奇葩代码,有的时候骂骂咧咧的吐槽一段奇葩代码后定睛一看作者,居然是几个月以前自己的写的,心中难免浮现曹操的那句名言:不可能,绝对不可能。
聊聊那些年遇到过的奇葩代码
震惊!一小伙用python这么容易就写了个飞机大战?!【含注释】
周末闲来无事,打算写写代码,但是又不知道写啥,眼睛余光无意中扫到书架上尘封已久的pygame书籍,那干脆写个游戏试一试,要写就写经典游戏吧,毕竟难度也不是很大,开搞。
|
小程序 Python
教你用Tkinter+多线程制作一个520表白程序~
大家好,我是志斌~ 每逢过节的时候,志斌都要绞尽脑汁想送给女朋友什么礼物,从而让她有一个与众不同的节日惊喜。这不今天520嘛,志斌尝试用Python给女朋友写了一个表白小程序!
328 0
教你用Tkinter+多线程制作一个520表白程序~
|
网络协议 C语言
学了C语言想装x能干点啥?手把手教你写个聊天软件来玩玩
学了C语言想装x能干点啥?手把手教你写个聊天软件来玩玩
272 0
学了C语言想装x能干点啥?手把手教你写个聊天软件来玩玩
|
编译器
为何代码没错,却出不来结果,你可能...
为何代码没错,却出不来结果,你可能...
136 0
为何代码没错,却出不来结果,你可能...