20240227-Python Tkinter学习笔记

Label标签

import tkinter as tk  # 导入tkinter模块,并简写为tk

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# 创建标签对象,并设置文本、背景色、字体和大小,以及标签的宽度和高度
l = tk.Label(window, text='OMG!This is TK!', bg='blue', font=('Arial', 12), width=15, height=2)

# 将标签放置在窗口中
l.pack()

# 进入主循环,等待窗口事件发生
window.mainloop()

Label标签和Button按钮

import tkinter as tk  # 导入tkinter模块,并简写为tk

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# 定义一个字符串类型的变量
var = tk.StringVar()

# 创建标签对象,使用textvariable参数绑定变量,使标签内容可以动态改变
l = tk.Label(window, textvariable=var, bg='blue', font=('Arial', 12), width=15, height=2)

# 将标签放置在窗口中
l.pack()

# 初始化一个标志变量,表示按钮是否被点击过
on_hit = False

# 定义按钮点击事件函数
def hit_me():
    global on_hit
    # 判断按钮是否被点击过
    if on_hit == False:
        on_hit = True
        var.set('You hit me!')  # 设置标签变量的值为'You hit me!'
    else:
        on_hit = False
        var.set('')  # 清空标签变量的值

# 创建按钮对象,并设置按钮文本、宽度、高度以及点击事件处理函数
b = tk.Button(window, text='hit me!', width=15, height=2, command=hit_me)

# 将按钮放置在窗口中
b.pack()

# 进入主循环,等待窗口事件发生
window.mainloop()

Listbox列表

import tkinter as tk  # 导入tkinter模块,并简写为tk

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# 定义一个字符串类型的变量
var = tk.StringVar()

# 创建标签对象,设置背景色为黄色,宽度为16,并使用textvariable参数绑定变量
l = tk.Label(window, bg='yellow', width=16, textvariable=var)

# 将标签放置在窗口中
l.pack()

# 定义打印选择的函数
def print_selection():
    # 判断用户是否已经选择了列表框中的项
    if lb.curselection():
        # 获取当前选择的值
        value = lb.get(lb.curselection())
        # 设置标签变量的值为当前选择的值
        var.set(value)
    else:
        # 提示用户未选择任何项
        var.set("Please select an item!")

# 创建按钮对象,并设置按钮文本、宽度、高度以及点击事件处理函数
b1 = tk.Button(window, text='Print selection', width=15, height=2, command=print_selection)

# 将按钮放置在窗口中
b1.pack()

# 定义一个字符串类型的变量,并设置初始值为元组
var2 = tk.StringVar()
var2.set((11, 22, 33, 44))

# 创建列表框对象,使用listvariable参数绑定变量
lb = tk.Listbox(window, listvariable=var2)

list_items = [1, 2, 3, 4]

# 遍历列表,向列表框中插入元素
for item in list_items:
    lb.insert('end', item)

lb.insert(1, 'first')  # 在索引1处插入元素'first'
lb.delete(3)  # 删除索引3处的元素

# 将列表框放置在窗口中
lb.pack()

# 进入主循环,等待窗口事件发生
window.mainloop()

Radiobutton单选按钮

import tkinter as tk  # 导入tkinter模块,并简写为tk

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# 定义两个字符串类型的变量,并设置初始值为None
var_group1 = tk.StringVar()
var_group2 = tk.StringVar()

# 创建标签对象,设置背景色为黄色,宽度为32,并初始化文本内容为'Empty'
l = tk.Label(window, bg='yellow', width=32, text='Empty')

# 将标签放置在窗口中
l.pack()

# 定义打印选择的函数
def print_selection():
    # 将标签的文本设置为所选项的值
    l.config(text='Your have selected '+var_group1.get())

# 创建第一组单选按钮对象,设置文本、选项值、变量、点击事件处理函数
r1_group1 = tk.Radiobutton(window, text='Option A', variable=var_group1, value="A", command=print_selection)
r1_group1.pack()

r2_group1 = tk.Radiobutton(window, text='Option B', variable=var_group1, value="B", command=print_selection)
r2_group1.pack()

r3_group1 = tk.Radiobutton(window, text='Option C', variable=var_group1, value="C", command=print_selection)
r3_group1.pack()

# 创建第二组单选按钮对象,设置文本、选项值、变量、点击事件处理函数
r1_group2 = tk.Radiobutton(window, text='Option X', variable=var_group2, value="X", command=print_selection)
r1_group2.pack()

r2_group2 = tk.Radiobutton(window, text='Option Y', variable=var_group2, value="Y", command=print_selection)
r2_group2.pack()

r3_group2 = tk.Radiobutton(window, text='Option Z', variable=var_group2, value="Z", command=print_selection)
r3_group2.pack()

# 进入主循环,等待窗口事件发生
window.mainloop()

Scale滑动条

import tkinter as tk  # 导入tkinter模块,并简写为tk

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# 创建标签对象,设置背景色为黄色,宽度为32,并初始化文本内容为'Empty'
l = tk.Label(window, bg='yellow', width=32, text='Empty')

# 将标签放置在窗口中
l.pack()

# 定义打印选择的函数,该函数接受一个参数v,表示滑动条的当前值
def print_selection(v):
    l.config(text='Your have selected '+ v)  # 更新标签文本为所选择的值

# 创建水平滑动条对象,设置标签、范围、方向、长度、显示值、刻度间隔、分辨率以及回调函数
s = tk.Scale(window, label='Name', from_=0, to=10, orient=tk.HORIZONTAL, length=200, showvalue=1, tickinterval=2, resolution=0.01, command=print_selection)

# 将滑动条放置在窗口中
s.pack()

# 进入主循环,等待窗口事件发生
window.mainloop()

Checkbutton多选框

import tkinter as tk  # 导入tkinter模块,并简写为tk

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# 创建标签对象,设置背景色为黄色,宽度为32,并初始化文本内容为'Empty'
l = tk.Label(window, bg='yellow', width=32, text='Empty')

# 将标签放置在窗口中
l.pack()

# 定义打印选择的函数
def print_selection():
    # 判断勾选情况并更新标签文本
    if var1.get() == 1 and var2.get() == 0:
        l.config(text='I love only Python')
    elif var1.get() == 0 and var2.get() == 1:
        l.config(text='I love only C++')
    elif var1.get() == 0 and var2.get() == 0:
        l.config(text='I do not love either')
    else:
        l.config(text='I love both')

# 定义两个整型变量,用于存储勾选状态
var1 = tk.IntVar()
var2 = tk.IntVar()

# 创建复选框对象,设置文本、变量、勾选值、取消勾选值、点击事件处理函数
c1 = tk.Checkbutton(window, text='Python', variable=var1, onvalue=1, offvalue=0, command=print_selection)
c1.pack()

c2 = tk.Checkbutton(window, text='C++', variable=var2, onvalue=1, offvalue=0, command=print_selection)
c2.pack()

# 进入主循环,等待窗口事件发生
window.mainloop()

Canvas画布

import tkinter as tk  # 导入tkinter模块,并简写为tk

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# 创建Canvas对象,设置背景色为黄色,高度为320,宽度为240
canvas = tk.Canvas(window, bg='yellow', height=320, width=240)

# 加载图片文件
image_file = tk.PhotoImage(file='2.png')

# 调整图片大小为原来的二十分之一
image_file = image_file.subsample(20, 20)

# 在Canvas上创建图片对象
image = canvas.create_image(0, 0, anchor='nw', image=image_file)

# 定义一些形状的坐标
x0, y0, x1, y1 = 50, 50, 80, 80

# 在Canvas上创建线对象
line = canvas.create_line(x0, y0, x1, y1)

# 在Canvas上创建椭圆对象
oval = canvas.create_oval(x0, y0, x1, y1, fill='red')

# 在Canvas上创建弧线对象
arc = canvas.create_arc(x0 + 50, y0 + 50, x1 + 50, y1 + 50, start=0, extent=180)

# 在Canvas上创建矩形对象
rect = canvas.create_rectangle(50, 50, 100, 100)

# 将Canvas放置在窗口中
canvas.pack()

# 定义一个移动矩形的函数
def movement():
    canvas.move(rect, 0, 2)

# 创建按钮,点击时调用movement函数
b = tk.Button(window, text='move', command=movement)
b.pack()

# 进入主循环,等待窗口事件发生
window.mainloop()

Menubar 菜单

import tkinter as tk  # 导入tkinter模块,并简写为tk

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# 创建标签对象,文本为空,宽度为32,背景色为黄色
l = tk.Label(window, text='', width=32, bg='yellow')

# 将标签放置在窗口中
l.pack()

# 定义一个全局变量,用于记录按钮点击次数
count = 0

# 定义按钮点击事件处理函数
def do_job():
    global count
    # 更新标签文本为按钮点击次数
    l.config(text='do ' + str(count))
    count += 1

# 创建菜单栏对象
menubar = tk.Menu(window)

# 创建文件菜单对象,设置tearoff参数为0
filemenu = tk.Menu(menubar, tearoff=0)

# 将文件菜单添加到菜单栏中,并设置标签为'File'
menubar.add_cascade(label='File', menu=filemenu)

# 在文件菜单中添加命令项,设置命令为do_job函数
filemenu.add_command(label='New', command=do_job)
filemenu.add_command(label='Open', command=do_job)
filemenu.add_command(label='Save', command=do_job)

# 创建子菜单对象
submenu = tk.Menu(filemenu, tearoff=0)

# 在文件菜单中添加一个级联的子菜单,设置标签为'Import'
filemenu.add_cascade(label="Import", menu=submenu, underline=0)

# 在子菜单中添加命令项,设置命令为do_job函数
submenu.add_command(label='Submenu1', command=do_job)

# 在文件菜单中添加一个分隔符
filemenu.add_separator()

# 在文件菜单中添加退出命令项,设置命令为窗口的quit方法
filemenu.add_command(label='Exit', command=window.quit)

# 将菜单栏添加到窗口中
window.config(menu=menubar)

# 进入主循环,等待窗口事件发生
window.mainloop()

Frame框架

import tkinter as tk  # 导入tkinter模块,并简写为tk

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# 在窗口上添加一个标签,显示文本'On the window'
tk.Label(window, text='On the window').pack()

# 创建一个框架对象frm
frm = tk.Frame(window)

# 将框架放置在窗口中
frm.pack()

# 创建两个子框架,frm_l放在左侧,frm_r放在右侧
frm_l = tk.Frame(frm)
frm_r = tk.Frame(frm)

# 将左右两个子框架放置在主框架中,左右排列
frm_l.pack(side='left')
frm_r.pack(side='right')

# 在左侧子框架frm_l上添加三个标签,分别显示不同的文本和背景颜色
tk.Label(frm_l, text='On the frm_l1', bg='red').pack()
tk.Label(frm_l, text='On the frm_l2', bg='green').pack()
tk.Label(frm_l, text='On the frm_l3', bg='blue').pack()

# 在右侧子框架frm_r上添加一个标签,显示文本'On the frm_r1',背景颜色为黄色
tk.Label(frm_r, text='On the frm_r1', bg='yellow').pack()

# 进入主循环,等待窗口事件发生
window.mainloop()

Messagebox弹窗

import tkinter as tk  # 导入tkinter模块,并简写为tk
from tkinter import messagebox  # 导入messagebox子模块

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# 定义一个函数,用于点击按钮时弹出信息框
def hit_me():
    # 使用messagebox模块的showinfo方法弹出信息框
    # messagebox.showinfo(title='Hi', message='hahahahaha') # 显示一般信息框。
    # messagebox.showwarning(title='Hi', message='nonononono') # 显示警告信息框。
    # messagebox.showerror(title='Hi', message='hahahahaha') # 显示错误信息框。
    # print(messagebox.askquestion(title='Hi', message='hahahahaha')) # 显示一个包含问题的对话框,返回用户的回答。
    # print(messagebox.askyesno(title='Hi', message='hahahahaha')) # 显示一个包含Yes和No的对话框,返回用户的选择。
    # print(messagebox.askokcancel(title='Hi', message='hahahahaha')) # 显示一个包含OK和Cancel的对话框,返回用户的选择。
    print(messagebox.askretrycancel(title='Hi', message='hahahahaha')) # 显示一个包含Retry和Cancel的对话框,返回用户的选择。

# 创建一个按钮,点击时调用one函数
tk.Button(window, text='Hit me', command=hit_me).pack()

# 进入主循环,等待窗口事件发生
window.mainloop()

pack/grid/place 布局方式

import tkinter as tk  # 导入tkinter模块,并简写为tk
from tkinter import messagebox  # 导入messagebox子模块

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('My window')

# 设置窗口大小
window.geometry('640x480')

# tk.Label(window,text=1).pack(side='top')
# tk.Label(window,text=4).pack(side='bottom')
# tk.Label(window,text=2).pack(side='left')
# tk.Label(window,text=3).pack(side='right')

# for i in range(4):
#     for j in range(3):
#         tk.Label(window,text='A').grid(row=i,column=j,padx=10,pady=10)

# 创建一个标签,并使用place布局管理器指定其位置
tk.Label(window,text=3).place(x=10,y=100,anchor='nw')

# 进入主循环,等待窗口事件发生
window.mainloop()

登录注册案例

import pickle
import tkinter as tk  # 导入tkinter模块,并简写为tk
from tkinter import messagebox  # 导入messagebox子模块

# 创建窗口对象
window = tk.Tk()

# 设置窗口标题
window.title('登录窗口')

# 设置窗口大小
window.geometry('640x480')

# 创建画布,并在顶部放置图像
canvas = tk.Canvas(window, height=200, width=640, background='yellow')
image_file = tk.PhotoImage(file='2.png')
image_file = image_file.subsample(4, 4)  # 缩小图片
image = canvas.create_image(150, 25, anchor='nw', image=image_file)
canvas.pack(side='top')

# 标签和输入框用于输入用户名和密码
tk.Label(window, text='User name: ').place(x=200, y=250)
tk.Label(window, text='Password: ').place(x=200, y=290)

# 创建StringVar对象,用于存储用户名和密码
var_user_name = tk.StringVar()
var_user_name.set('example@python.com')

# 输入用户名的文本框
entry_user_name = tk.Entry(window, textvariable=var_user_name)
entry_user_name.place(x=300, y=250)

# 输入密码的文本框,密码以星号显示
var_user_pwd = tk.StringVar()
entry_user_pwd = tk.Entry(window, textvariable=var_user_pwd, show='*')
entry_user_pwd.place(x=300, y=290)

# 用户登录函数
def user_login():
    user_name = var_user_name.get()  # 获取输入的用户名
    user_pwd = var_user_pwd.get()  # 获取输入的密码
    try:
        # 尝试读取用户信息文件
        with open('users_info.pickle', 'rb') as user_file:
            users_info = pickle.load(user_file)
    except FileNotFoundError:
        # 如果文件不存在,则创建一个新的文件,并添加一个默认的管理员用户
        with open('users_info.pickle', 'wb') as user_file:
            users_info = {'admin': 'admin'}
            pickle.dump(users_info, user_file)
    # 检查用户名和密码是否正确
    if user_name in users_info:
        if user_pwd == users_info[user_name]:
            messagebox.showinfo('Welcome', 'How are you?' + user_name)
        else:
            messagebox.showerror('Error!', 'Your password is wrong, try again?')
    else:
        # 如果用户名不存在,提示用户是否注册新账户
        is_sign_up = messagebox.askyesno('Welcome', 'You have not signed up yet. Sign up today?')
        if is_sign_up:
            user_sign_up()

# 登录按钮
btn_login = tk.Button(window, text='Login', command=user_login)
btn_login.place(x=250, y=350)

# 用户注册函数
def user_sign_up():
    def sign():
        np = new_pwd.get()  # 获取输入的新密码
        npc = new_pwd_confirm.get()  # 获取输入的确认密码
        nn = new_name.get()  # 获取输入的新用户名
        # 读取现有的用户信息
        with open('users_info.pickle', 'rb') as user_file:
            exist_users_info = pickle.load(user_file)
        # 检查密码是否一致,用户名是否已经存在
        if np != npc:
            messagebox.showerror('Error', 'Password and confirm password must be the same!')
        elif nn in exist_users_info:
            messagebox.showerror('Error', 'The user has already signed up!')
        else:
            # 注册新用户并保存到文件中
            exist_users_info[nn] = np
            with open('users_info.pickle', 'wb') as user_file:
                pickle.dump(exist_users_info, user_file)
            messagebox.showinfo('Welcome', 'You have successfully signed up!')
            window_sign_up.destroy()

    window_sign_up = tk.Toplevel(window)  # 创建一个新的顶层窗口
    window_sign_up.geometry('350x200')  # 设置窗口大小
    window_sign_up.title('注册界面')  # 设置窗口标题

    # 新用户名输入框
    new_name = tk.StringVar()
    new_name.set('example@python.com')
    tk.Label(window_sign_up, text='User name: ').place(x=10, y=10)
    entry_new_name = tk.Entry(window_sign_up, textvariable=new_name)
    entry_new_name.place(x=150, y=10)

    # 新密码输入框
    new_pwd = tk.StringVar()
    tk.Label(window_sign_up, text='Password: ').place(x=10, y=50)
    entry_new_pwd = tk.Entry(window_sign_up, textvariable=new_pwd, show='*')
    entry_new_pwd.place(x=150, y=50)

    # 确认密码输入框
    new_pwd_confirm = tk.StringVar()
    tk.Label(window_sign_up, text='Confirm password: ').place(x=10, y=90)
    entry_new_pwd_confirm = tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*')
    entry_new_pwd_confirm.place(x=150, y=90)

    # 确认注册按钮
    btn_confirm_sign_up = tk.Button(window_sign_up, text='Sign up', command=sign)
    btn_confirm_sign_up.place(x=150, y=130)

# 注册按钮
btn_sign_up = tk.Button(window, text='Sign up', command=user_sign_up)
btn_sign_up.place(x=350, y=350)

# 进入主循环,等待窗口事件发生
window.mainloop()

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值