本文将介绍Tkinter中部分组件用法
代码运行效果:
可完成对考生姓名,省份城市,本专科类别,英语专业的录入
因为需要在图像化界面上显示输出结果,所以先构造一个Frame框lab1,以便与后续输出结果部分的lab2互不干扰
lab1 = tk.Frame(win)
l1 = tk.Label(lab1,text = '姓名',width = 10,height = 2,font = ('楷体',15)).grid(row = 0,column = 0)
l2 = tk.Label(lab1,text = '省份',width = 10,height = 2,font = ('楷体',15)).grid(row = 1,column = 0)
l3 = tk.Label(lab1,text = '城市',width = 10,height = 2,font = ('楷体',15)).grid(row = 1,column = 2 )
l4 = tk.Label(lab1,text = '请选择考生科目类别:',width = 20,height = 2,font = ('楷体',15))
e1 = tk.Entry(lab1)
l4.grid(row = 2, column = 0)
e1.grid(row = 0, column = 1)
lab1.grid()
如下图:
(下拉框Combobox,单选按钮RadioButton,多选按钮CheckButton,获取信息 和 删除信息的按扭Button 这些部分代码将在后续看到)
接着构造lab2:
lab2 = tk.Frame(win)
listbox = tk.Listbox(lab2,width = 80,height = 60,selectmode = 'multiple')
lab2.grid()
listbox.grid(row = 5)
lab2用来显示添加入的学生信息
下拉框Combobox部分
因为省份要和城市相对应,即省份更换城市也随即更换
所以建立一个省份城市的字典,省份是键,城市是值,城市利用数组存放
#省市是键 城市是值 键值匹配
def Func(event):
city_list = province_city_dict[province.get()]
city_box["values"] = city_list
#省份变化,城市也跟着变,所以建立一个province_city_dict字典
city_null = [' ']
city_BJ = ['朝阳区', '顺义区', '昌平区']
city_NMG = ['呼和浩特市', '包头市', '鄂尔多斯市']
city_LN = ['沈阳市', '大连市', '抚顺市']
province_city_dict ={"": city_null,
"北京市" : city_BJ,
"内蒙古自治区" : city_NMG,
"辽宁省" : city_LN}
province_keys = list(province_city_dict.keys())
#构造省份combobox
province = tk.StringVar()
province_box = ttk.Combobox(lab1,width = 20,textvariable = province,state = "readonly")
province_box["values"] = province_keys
province_box.grid(row = 1,column = 1)
province_box.current(0)
province_box.bind("<<ComboboxSelected>>",Func)
#构建城市combobox
city = tk.StringVar()
city_box = ttk.Combobox(lab1,width = 20,textvariable = city,state = "readonly")
city_box["values"] = province_city_dict[province.get()]
city_box.grid(row = 1,column = 3)
单选按钮Radiobutton
v1 = tk.IntVar()
degrees = ['本科生','专科生']
for i in range(0,2):
c1 = tk.Radiobutton(lab1, text = degrees[i],
variable = v1, value = i)
c1.grid(row = 2, column = i+1)
多选按钮CheckButton
Checkbutton(多选按钮)组件用于实现确定是否选择的按钮。Checkbutton 组件可以包含文本或图像,你可以将一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将被自动执行。
Checkbutton 组件被用于作为二选一的按钮,在此处就被用作选定是否为英语专业考生
当选中(打勾)时返回值为1,没选中自动为0
v2 = tk.IntVar()
c3 = tk.Checkbutton(lab1,text = '是否为英语专业',
variable = v2,
onvalue = 1, #选中为1
offvalue = 0,)#没选中为0
c3.grid(row=3,column = 0)
展示学生信息
#define函数展示学生的信息
def show_news():
name = e1.get()
if v1.get() == 0:
degree = "本科"
elif v1.get() == 1:
degree = "专科"
if (v2.get() == 1): #如果Checkbutton打勾返回值为1
profession = "是"
else :
profession = "否"
Str = '学生姓名:' +e1.get()+' 省份:'+province.get()+' 城市:'+city.get()+\
' 本科专科类别:'+degree+' 是否英语考生:'+profession
if not name == '': #当name不为空时,才能插入
index = listbox.curselection()
if len(index) > 0:
listbox.insert(index[0], Str)
else:
listbox.insert("end", Str)
e1.delete(0,'end')
tk.Button(lab1,text="获取信息", width=10, command = show_news).grid(row = 3, column = 1)
删除学生信息
#删除一个学生的信息
def delete_news():
index = listbox.curselection()[::-1] #index从第一个学生读到最后一个
for i in index:
listbox.delete(i)
tk.Button(lab1,text="删除信息", width=10, command = delete_news).grid(row = 3,column = 2)
完整代码如下
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
lable = tk.Label()
win.title('考生信息注册')
win.geometry('700x500')
#构造两个Frame框lab1,lab2
lab1 = tk.Frame(win)
l1 = tk.Label(lab1,text = '姓名',width = 10,height = 2,font = ('楷体',15)).grid(row = 0,column = 0)
l2 = tk.Label(lab1,text = '省份',width = 10,height = 2,font = ('楷体',15)).grid(row = 1,column = 0)
l3 = tk.Label(lab1,text = '城市',width = 10,height = 2,font = ('楷体',15)).grid(row = 1,column = 2 )
l4 = tk.Label(lab1,text = '请选择考生科目类别:',width = 20,height = 2,font = ('楷体',15))
e1 = tk.Entry(lab1)
l4.grid(row = 2, column = 0)
e1.grid(row = 0, column = 1)
lab1.grid()
lab2 = tk.Frame(win)
listbox = tk.Listbox(lab2,width = 80,height = 60,selectmode = 'multiple')
lab2.grid()
listbox.grid(row = 5)
#define函数展示学生的信息
def show_news():
name = e1.get()
if v1.get() == 0:
degree = "本科"
elif v1.get() == 1:
degree = "专科"
if (v2.get() == 1): #如果Checkbutton打勾返回值为1
profession = "是"
else :
profession = "否"
Str = '学生姓名:' +e1.get()+' 省份:'+province.get()+' 城市:'+city.get()+\
' 本科专科类别:'+degree+' 是否英语考生:'+profession
if not name == '': #当name不为空时,才能插入
index = listbox.curselection()
if len(index) > 0:
listbox.insert(index[0], Str)
else:
listbox.insert("end", Str)
e1.delete(0,'end')
#删除一个学生的信息
def delete_news():
index = listbox.curselection()[::-1] #index从第一个学生读到最后一个
for i in index:
listbox.delete(i)
#省市是键 城市是值 键值匹配
def Func(event):
city_list = province_city_dict[province.get()]
city_box["values"] = city_list
#省份变化,城市也跟着变,所以建立一个province_city_dict字典
city_null = [' ']
city_BJ = ['朝阳区', '顺义区', '昌平区']
city_NMG = ['呼和浩特市', '包头市', '鄂尔多斯市']
city_LN = ['沈阳市', '大连市', '抚顺市']
province_city_dict ={"": city_null,
"北京市" : city_BJ,
"内蒙古自治区" : city_NMG,
"辽宁省" : city_LN}
province_keys = list(province_city_dict.keys())
#构造省份combobox
province = tk.StringVar()
province_box = ttk.Combobox(lab1,width = 20,textvariable = province,state = "readonly")
province_box["values"] = province_keys
province_box.grid(row = 1,column = 1)
province_box.current(0)
province_box.bind("<<ComboboxSelected>>",Func)
#构建城市combobox
city = tk.StringVar()
city_box = ttk.Combobox(lab1,width = 20,textvariable = city,state = "readonly")
city_box["values"] = province_city_dict[province.get()]
city_box.grid(row = 1,column = 3)
v1 = tk.IntVar()
v2 = tk.IntVar()
degrees = ['本科生','专科生']
for i in range(0,2):
c1 = tk.Radiobutton(lab1, text = degrees[i],
variable=v1, value=i)
c1.grid(row=2, column=i+1)
c3 = tk.Checkbutton(lab1,text = '是否为英语专业',
variable = v2,
onvalue = 1,
offvalue = 0,)
c3.grid(row=3,column = 0)
tk.Button(lab1,text="获取信息", width=10, command = show_news).grid(row = 3, column = 1)
tk.Button(lab1,text="删除信息", width=10, command = delete_news).grid(row = 3,column = 2)
win.mainloop()