全部都是我自己学习过程中的笔记,注释也是根据我初学时候会遇到的问题补充上的,绝对不会糊弄别人。一共有3个模块。
时间:2022.1.24
第一个ui.py
"""tkinter学习笔记"""
import tkinter
import ui_ini
from tkinter import ttk # 有部分组件在这里面
# 生成一个主窗口对象
top = tkinter.Tk()
# 设置标题
top.title('增删改查')
# 获取电脑屏幕的大小, 常用于计算窗口居中位置
# win_width, win_height = top.maxsize()
# 初始化窗口大小(这里参数是字符串,长宽之间用一个x表示, 后面两个参数是窗口中心分别相对屏幕左边和上边的距离)
top.geometry('750x500+400+200')
# 设置窗口是否可以缩放(拉大拉小)
top.resizable(width=False, height=False)
"""添加组件"""
# 标签组件(标签就是文本)
label1 = tkinter.Label(top, text='学生信息管理系统', font=('华文彩云', 20))
# label1.pack() # 将标签添加到窗口(默认居中)
label1.place(x=265, y=0) # 也可以自己计算位置放置(推荐)
# 按钮组件, 注意command里面的函数不加括号
button1 = tkinter.Button(top, text='说明', command=ui_ini.SM)
# button1.pack()
button1.place(x=355, y=40) # 也可以自己计算位置放置(推荐)
# 输入框组件的使用
label2 = tkinter.Label(top, text='账号:', font=('FangSong', 20))
label2.place(x=200, y=100)
label3 = tkinter.Label(top, text='密码:', font=('FangSong', 20))
label3.place(x=200, y=150)
# 账号
entry_text1 = tkinter.StringVar()
entry_text1.set('请输入账号')
entry1 = tkinter.Entry(top, font=('FangSong', 20), width=20, textvariable=entry_text1)
entry1.place(x=340, y=100)
# 密码
entry_text2 = tkinter.StringVar()
entry2 = tkinter.Entry(top, font=('FangSong', 20), width=20, textvariable=entry_text2, show='*')
entry2.place(x=340, y=150)
# 获得输入框输入数据 button调用传参函数实例——lambda。实现无参调用有参函数
button2 = tkinter.Button(top, text='登录', command=lambda: ui_ini.DL_input(entry_text1))
button2.place(x=400, y=200)
button3 = tkinter.Button(top, text='注册', command=ui_ini.ZCbutton)
button3.place(x=600, y=200)
# 菜单组件(5步法)
# 1
menu = tkinter.Menu(top)
# 2 tearoff就是把菜单拉出去,可以设置成1看看,其实没有用
submenu = tkinter.Menu(menu, tearoff=0)
# 3 添加下拉选项, 注意command函数不能加括号!!!
submenu.add_command(label='说明1', command=ui_ini.SM)
# submenu.add_separator() # 子菜单分割线
submenu.add_command(label='说明2', command=ui_ini.SM)
# 4 创建主菜单文件
menu.add_cascade(label='特殊', menu=submenu)
# 5
top.config(menu=menu)
# 下拉列表组件
language_text = tkinter.StringVar()
languages_list = ['汉语', '英语', '日语', '韩语']
languages = ttk.Combobox(top,
font=('FangSong', 10),
textvariable=language_text,
values=languages_list,
state='readonly',
width=5)
languages.current(2) # 默认选中项目(索引)
languages.place(x=650, y=470)
# 单选组件
radio_text = tkinter.StringVar()
# 注意是variable, 不是textvariable, variable起到分组的作用
ttk.Radiobutton(top, variable=radio_text, value='男', text='男').place(x=225, y=300)
ttk.Radiobutton(top, variable=radio_text, value='女', text='女').place(x=350, y=300)
# 复选组件
# 和单选组件不同的地方:每一组variable不一样, 每一个复选框有2个value, 单选框用StringVar, 复选框使用Intvar
check_text1 = tkinter.IntVar()
check_text2 = tkinter.IntVar()
ttk.Checkbutton(top, variable=check_text1, text='复选框1', onvalue=1, offvalue=0).place(x=225, y=350)
ttk.Checkbutton(top, variable=check_text2, text='复选框2', onvalue=1, offvalue=0).place(x=350, y=350)
# 开启消息循环
top.mainloop()
第二个ui_ini.py模块
"""辅助模块"""
from tkinter import messagebox
import tkinter
from tkinter import Toplevel
# 登录按钮按下
def SM():
t = tkinter.Tk()
t.geometry('300x50')
t.resizable(width=False, height=False)
tkinter.Label(t, text='使用时请严格遵守国家法律哦!', font=('FangSong', 10)).place(x=0, y=0)
t.mainloop()
# 登录输入框处理
def DL_input(entry_text):
zh = entry_text.get()
if zh == '':
# 消息框
messagebox.showerror(title='出错了', message='账号不能为空')
else:
# 消息框
messagebox.showinfo(title='欢迎', message='登陆成功')
print(zh)
# 注册按钮按下
def ZCbutton():
# 这也是一个窗体建立的方法,但他(Toplevel)是基于当前窗体(Tk)的子窗体
top = Toplevel()
top.title('注册')
top.resizable(width=False, height=False)
top.geometry('750x500+400+200')
# 组件的使用和Tk一样
# text多行文本框组件
text = tkinter.Text(top, font=('华文彩云', 10), width=100)
text.place(x=15, y=20)
top.mainloop()
第三个:绘图控件.py
"""绘图控件使用"""
import tkinter
root = tkinter.Tk()
canvas = tkinter.Canvas(
root,
width=600,
height=480,
bg='white' # 背景色
)
# tkinter image对象正确的使用方法
im = tkinter.PhotoImage(file='各位自行脑补路径')
# 将打开的照片添加到绘图控件
canvas.create_image(300, 50, image=im)
# 绘制文字
canvas.create_text(
300, 70,
text='哈哈哈',
fill='blue'
)
# 绘制直线
canvas.create_line(
250, 130, 350, 130
)
# 下面方法参数就不写了,都是差不多的
# canvas.create_polygon() 绘制六边形
# canvas.create_arc() 绘制圆弧
# canvas.create_rectangle() 绘制矩形
# canvas.create_oval() 绘制椭圆
# ...
root.mainloop()
!!!这一篇文章以后可能会有补充,欢迎大家关注!!!
|