学习记录:tkinter 24个基础例子练习

1.显示一个窗口
2.显示窗口标题
3.显示窗口标签内容
4.窗口显示多个标签,并且显示标签的背景颜色
5.第一种方法绑定事件
6.第二种方式绑定事件
7.设置属性
8.pack的布局实例
9.grid 布局
10.标签模拟按钮
11.输入框以及登录程序
12.菜单与选择按钮
13.弹出菜单(鼠标右键弹出菜单)
14.菜单插入分割线
15.菜单单选按钮和复选按钮
16.对话框和信息框
17.弹出提示框
18.复选框
19.文本域
20.创建多窗口
21.canvas
22.绘制中国象棋棋盘
23.窗口美化
24.打包exe程序

# 小测试两行代码
# import tkinter
# tkinter._test()
# 1.显示一个窗口
# from tkinter import *  # 引入该模块
# root = Tk()            # 对TK()这个类进行实例化,root即是整个窗口程序对象
# root.mainloop()        # 窗口循环接收下一个事件



# 2.显示窗口标题
# from tkinter import *
# root = Tk()
# root.wm_title('这是一个Tkinter程序窗口标题')
# root.mainloop()



# 3.显示窗口标签内容
# from tkinter import *
# root = Tk()
# root.wm_title('这是一个TKinter程序窗口标题')
# wl = Label(root, text = 'hello world')
# wl.pack()
# root.mainloop()



# 4.窗口显示多个标签,并且显示标签的背景颜色
# from tkinter import *
# root = Tk()
# root.wm_title('这是一个Tkinter程序窗口标题')
# w1 = Label(root, text = '标签1', background = 'white')
# w2 = Label(root, text = '标签2', background = 'green')
# w3 = Label(root, text = '标签3', background = 'red')
# w1.pack()
# w2.pack()
# w3.pack()
# root.mainloop()



# 5.第一种方法绑定事件
#   实现点击按钮显示内容
# from tkinter import *
# def MyLabel():
#     global py, i
#     s = Label(py, text = 'hello world %d 遍!' % i)
#     s.pack()
#     i+=1    # 每次点击后,i的值会自增1

# py = Tk()
# i = 1 # 全局变量i 初始化为 1
# b = Button(py, text = 'hello world', command = MyLabel)
# b.pack()
# py.mainloop()



# 6.第二种方式绑定事件
# from tkinter import *
# def myLabel(event): # 这里多了一个event参数用来接收
#     global py, i
#     s = Label(py, text = 'hello world %d' % i)
#     s.pack()
#     i+=1

# py = Tk()
# i = 1
# b = Button(py, text = 'python') # command = mylabel 木有了
# b.bind('<Button-1>', myLabel)
# b.pack()
# py.mainloop()




# 7.设置属性
# from tkinter import *
# py = Tk()

# b1 = Button(py, text = 'hello world')
# b1['width'] = 20
# b1['height'] = 4
# b1.pack()

# b2 = Button(py, text = 'hello world2')
# b2['width'] = 20
# b2['background'] = 'white'
# b2.pack()

# py.mainloop()



# 8.pack的布局实例

# pack 函数也可以接受⼏个参数:
# side 参数指定了它停 靠在哪个⽅向,可以为 LEFT,TOP,RIGHT,BOTTOM,分别代表 左,上,右,下;
# fill 参数可以是 X,Y,BOTH 和 NONE,即在水平方向填充,竖直方向填充,水平和竖直方向填充和不填充。
# expand 参数可以是 YES 和 NO,它的 anchor 参数可 以是 N,E,S,W(这里的 NESW 分别表示北东南⻄,这⾥分别 表示上右下左)以及他们的组合或者是CENTER(表示中 间)。
# ipadx 表示的是内边距的 x ⽅向,它的 ipady 表示 的是内边距的 y ⽅向,padx
# 表示的是外边距的 x ⽅向, pady 表示的是外边距的 y ⽅向。

# from tkinter import *
# root = Tk()
# Button(root, text = 'A').pack(side = LEFT, expand = YES, fill = Y)
# Button(root, text = 'B').pack(side = TOP, expand = YES, fill = BOTH)
# Button(root, text = 'C').pack(side = RIGHT, expand = YES, fill = NONE, anchor = NE)
# Button(root, text = 'D').pack(side = LEFT, expand = NO, fill = Y)
# Button(root, text = 'E').pack(side = TOP, expand = NO, fill = Y)
# Button(root, text = 'F').pack(side = BOTTOM, expand = YES)
# Button(root, text = 'G').pack(anchor = SE)
# root.mainloop()




# 9.grid 布局

# 由于我们的程序大多数都是矩形,因此特别适合于网格布局,也就是 grid 布局。
# 使用grid 布局的时候,我们使用 grid 函数,在里面指 定两个参数,用 row 表示行, 用 column 表示列,注意的是 row 和 column 的编号都从 0 开始。
# grid 函数还有个 sticky 参数,它可以用 N,S,W,E 表示 上,下,左,右 , 它决定了这个组件是从哪个方向开始的, 下面的例子可以很好的解释这一点。
# grid 布局直接用后面的行和列的数字来指定了它位于哪个位置,而不必使用其他参数。
# grid 函数也支持诸如 ipadx,ipady,padx,pady ,它们的意思和 pack 函数是一样的,默认边距是 0。
# 它还支持参数比如 rowspan ,表示跨越的行数, columnspan 表示跨越的列数。

# 账号登录例子
# from tkinter import *
# py = Tk()
# Label(py, text = '账号:').grid(row = 0, sticky = W)
# Entry(py).grid(row = 0, column = 1, sticky = E)

# Label(py, text = '密码:').grid(row = 1, sticky = W)
# Entry(py).grid(row = 1, column = 1, sticky = E)

# Button(py, text = '登录').grid(row = 2, column = 1,sticky = E)

# py.mainloop()



# 10.标签模拟按钮
# from tkinter import *

# def myLabel(event):
#     global py
#     s = Label(py, text = 'hello world')
#     s.pack()

# py = Tk()

# n = Label(py, text = 'hello world')
# n.bind('<Button-1>', myLabel)
# n.pack()

# py.mainloop()



# 11.输入框以及登录程序
# from tkinter import *
# def reg():
#     myAccount = a_entry.get() # 获取用户输入的用户名
#     myPassword = p_entry.get() # 获取用户输入的密码
#     a_len = len(myAccount) # 获取输入的用户名长度
#     p_len = len(myPassword) # 获取输入的密码长度
#     if myAccount == "admin" and myPassword == "admin123":
#         msg_label["text"] = "登录成功" # 用户名和密码全部正确 
    
#     elif myAccount == "admin" and myPassword != "admin123":
#         msg_label["text"] = "密码错误" # 用户名正确密码错误
#         p_entry.delete(0, p_len)

#     else:
#         msg_label["text"] = "用户名错误" # 用户名错误
#         a_entry.delete(0, a_len)
#         p_entry.delete(0, p_len)
# root = Tk()
# # 用户名
# a_label = Label(root, text = "用户名:")
# a_label.grid(row = 0, column = 0, sticky = W)
# a_entry = Entry(root)
# a_entry.grid(row = 0, column = 1, sticky = E)
# # 密码
# p_label = Label(root, text = "密码:")
# p_label.grid(row = 1, column = 0, sticky = W)
# p_entry = Entry(root)
# p_entry["show"] = "*" # 密码显示为 *
# p_entry.grid(row = 1, column = 1, sticky = E)
# # 登录按钮
# btn = Button(root, text = "登录", command = reg)
# btn.grid(row = 2, column = 1, sticky = E)
# # 提示信息
# msg_label = Label(root, text = "")
# msg_label.grid(row = 3)
# root.mainloop()




# 12.菜单与选择按钮
# from tkinter import *
# root = Tk()
# menuBar = Menu(root)
# for item in ["目录", "编辑", "工具", "关于"]:
#     menuBar.add_command(label = item)
# root["menu"] = menuBar
# root.mainloop()

# from tkinter import *
# root = Tk()
# menuBar = Menu(root)
# fMenu = Menu(menuBar) # 文件

# for item in ["新建", "打开", "保存", "另存为", "退出"]:
#     fMenu.add_command(label = item)
#     eMenu = Menu(menuBar) # 编辑
# for item in ["复制", "粘贴", "剪切", "撤销"]:
#     eMenu.add_command(label = item)
#     vMenu = Menu(menuBar) # 视图
# for item in ["默认视图", "全屏模式", "显示/隐藏菜单"]:
#     vMenu.add_command(label = item)
#     aMenu = Menu(menuBar) # 关于
# for item in ["版权信息", "帮助文档"]:
#     aMenu.add_command(label = item)

# menuBar.add_cascade(label = "文件", menu = fMenu)
# menuBar.add_cascade(label = "编辑", menu = eMenu)
# menuBar.add_cascade(label = "视图", menu = vMenu)
# menuBar.add_cascade(label = "关于", menu = aMenu)

# root["menu"] = menuBar
# root.mainloop()


# 13.弹出菜单(鼠标右键弹出菜单)
# from tkinter import *

# def myLabel():
#     global root
#     Label(root, text = "我的Python课程").pack() # 点击Python后添加这个标签

# root = Tk()
# menuBar = Menu(root)

# for each in ["C/C++", "JavaEE", "Android"]:
#     menuBar.add_command(label = each)

# menuBar.add_command(label = "Python", command = myLabel) #点击python显示标签

# def pop(event):
#     menuBar.post(event.x_root, event.y_root)
    
# root.bind("<Button-3>", pop) # 鼠标右击绑定

# root.mainloop()



# 14.菜单插入分割线
# from tkinter import *
# root = Tk()
# menuBar = Menu(root)
# sonMenu = Menu(menuBar)

# for each in ["C/C++", "Python", "JavaEE", "Android", "iOS", "云计算"]:
#     sonMenu.add_command(label = each)

# sonMenu.add_separator() # 插入分割线

# for each in ["PHP", "UI设计", "前端与移动开发", "网络营销"]:
#     sonMenu.add_command(label = each)

# menuBar.add_cascade(label = '天天学python', menu = sonMenu)

# root["menu"] = menuBar
# root.mainloop()




# 15.菜单单选按钮和复选按钮
# from tkinter import *
# root = Tk()
# menuBar = Menu(root)
# sonMenu = Menu(menuBar)
# for each in ["C/C++", "Python", "JavaEE", "Android", "iOS", "云计算"]:
#     sonMenu.add_radiobutton(label = each) # add_command() 改成 add_radiobutton()
# sonMenu.add_separator() # 插入分割线

# for each in ["PHP", "UI设计", "前端与移动开发", "网络营销"]:
#     sonMenu.add_checkbutton(label = each) # add_command() 改成 add_checkbutton()

# menuBar.add_cascade(label = "传智学科列表", menu = sonMenu)
# root["menu"] = menuBar

# root.mainloop()





# 16.对话框和信息框
# from tkinter.dialog import *
# from tkinter import *

# def myDialog():
#     d = Dialog(None, title = "Python调查", text = "喜欢Python吗?", bitmap = DIALOG_ICON, default = 0, strings = ("喜欢", "很喜欢", "非常喜欢"))
#     print(d.num)

# btn_begin = Button(None, text = "Python调查", command = myDialog)
# btn_begin.pack()

# btn_quit = Button(None, text = "关闭", command = btn_begin.quit)
# btn_quit.pack()

# btn_begin.mainloop()




# 17.弹出提示框
# from tkinter.messagebox import *
# showinfo(title = "demo", message = "好好学习,天天向上!")



# 18.复选框
# from tkinter import *

# timeA = 0
# timeB = 0

# def funcA():
#     global lab, btnA, timeA
#     if timeA % 2 == 0:
#         timeA += 1
#         lab["text"] = "Python学科被选中"
#     else:
#         timeA += 1
#         lab["text"] = "Python学科被取消"
# def funcB():
#     global lab, btnB, timeB
#     if timeB % 2 == 0:
#         timeB += 1
#         lab["text"] = "C++学科被选中"
#     else:
#         timeB += 1
#         lab["text"] = "C++学科被取消"

# root = Tk()
# btnA = Checkbutton(root, text = "Python学科", command = funcA)
# btnA.pack()

# btnB = Checkbutton(root, text = "C++学科", command = funcB)
# btnB.pack()

# lab = Label(root, text = " ")
# lab.pack()

# root.mainloop()




# 19.文本域
# from tkinter import *
# root = Tk()
# t = Text(root, width = 50, height = 30)
# t.pack()
# root.mainloop()

# 19.创建多窗口
# from tkinter import *

# root = Tk()
# root.title("我是root窗口")
# lr = Label(root, text = "我属于root")
# lr.pack()

# top = Toplevel(root, width = 30, height = 20)
# top.title("我是toplevel窗口")
# lt = Label(top, text = "我属于toplevel")
# lt.pack()

# root.mainloop()



# 21.canvas
# from tkinter import *

# root = Tk()
# root.title("随便绘制一下下")

# canv = Canvas(root, width = 400, height = 300, bg = "pink")
# canv.create_line((0,0), (200,200), width = 8)
# canv.create_text(300, 30, text = "Python ")
# canv.pack()

# root.mainloop()

# 22.绘制中国象棋棋盘
# from tkinter import *
# root = Tk()
# root.title("中国象棋棋盘")

# canv = Canvas(root, width = 400, height = 450)
# canv.create_line((0,2), (400,2), width = 2)
# for i in range(10):
#     canv.create_line((0, i * 50), (400, i * 50), width = 2)
# canv.create_line((3,0), (3,450), width = 2)
# for i in range(8):
#     canv.create_line((i * 50,0), (i * 50,200), width = 2)
# for i in range(8):
#     canv.create_line((i * 50,250), (i * 50,450), width = 2)

# canv.create_line((397,0), (397,450), width = 2)
# canv.create_line((150,0), (250,100), width = 2)
# canv.create_line((150,100), (250,0), width = 2)
# canv.create_line((150,450), (250,350), width = 2)
# canv.create_line((150,350), (250,450), width = 2)
# canv.create_text(110, 220, text = "汉界")
# canv.create_text(290, 220, text = "楚河")
# canv.pack()

# root.mainloop()


# 23.窗口美化
# from tkinter import *
# root = Tk()
# root.geometry("300x280+150+200")
# root.title("窗口美化")
# root.overrideredirect(1)
# root.iconbitmap("test.ico")
# root.mainloop()

# 1、ttk美化
# from tkinter import *
# from tkinter.ttk import *
# root = Tk()
# btn = Button(root, text = "ttk美化")
# btn.pack()
# root.mainloop()

# 2、没有ttk美化
# from tkinter import *
# root = Tk()
# btn = Button(root, text = "没有ttk美化")
# btn.pack()
# root.mainloop()


# 24.打包exe程序
# 使用pyinstaller 打包我们的程序
# 升级我们的pip版本 python -m pip install --upgrade pip
# 通过pip安装 pyinstaller pip install pyinstaller
# 进入项目件的文件夹,执行下面命令 pyinstaller -w MoreBalls