登陆界面、学生信息记录界面——Python
Button 按钮
Canvas 画布、用于绘制直线、椭圆、多边形等形状
Checkbutton 复选框
Entry 单行文本框
Frame 框架,可以作为其它组建的容器,常用来对组件进行分组
Label 标签,常用来显示单行文本
Listbox 列表框
Menu 菜单
Message 多行文本标签
Radiobutton 单选按钮,同一组的单选按钮任何时刻都智能有一个处于选中状态
Scrollbar 滚动条
Toplevel 常用来创建新的窗口
1、用户登陆界面
来源:《python程序设计》第四版
作者:董付国
''' 用户登陆界面 ''' import os.path import os import tkinter import tkinter.messagebox #path它获取的不是系统路劲,二是系统盘下的 #可以单独测试一下 print(os.getenv('temp')) path = os.getenv('temp') filename = os.path.join(path,'info.txt') #创建应用程序窗口 root = tkinter.Tk() #定义窗口大小 ''' 设置变量属性的3个方法 1、再属性的()里定义 2、root[] 3、root.config(text='gsad') ''' root['height'] = 300 root['width'] = 500 #再创建标签组件 labelName = tkinter.Label(root,text='User Name:',justify=tkinter.RIGHT,width=180,bg='red') labelName.place(x=10,y=5,width=80,height=20) #创建字符串变量和文本框组件,同时设置关联的变量 #varName 十和entryName绑定的,也就是说,entryName输入值的时候,var就会变 varName = tkinter.StringVar(root,value='') entryName = tkinter.Entry(root,width=80,textvariable=varName) entryName.place(x=100,y=5,width=80,height=20) #创建密码标签 labelPwd = tkinter.Label(root,text='User Pwd',justify=tkinter.RIGHT,anchor='e',width=80) labelPwd.place(x=10,y=30,width=80,height=20) #创建密码文本框 varPwd = tkinter.StringVar(root,value='') entryPwd = tkinter.Entry(root,show='*',width=80,textvariable=varPwd) #show是密码显示框的意思,输入密码隐藏 entryPwd.place(x=100,y=30,width=80,height=20) #尝试自动填写用户名和密码 try: with open(filename) as fp: n,p = fp.read().strip().split(',') varName.set(n) varPwd.set(p) except: print('文件不存在') #Remember me复选框 rememberMe = tkinter.IntVar(root,value=1) #选中时变量值为1,为选中时变量值为0,默认选中 checkRemember = tkinter.Checkbutton(root,text='Remember me?',variable=rememberMe,onvalue=1,offvalue=0) checkRemember.place(x=30,y=70,width=120,height=20) #登陆按钮事件处理函数 def login(): #获取用户名和密码 name = entryName.get() pwd = entryPwd.get() if name =='admin' and pwd == '123456': tkinter.messagebox.showinfo(title='恭喜',message='登陆成功') if rememberMe.get() == 1: #把登陆成功的信息写入临时文件 with open(filename , 'w') as fp: fp.write(','.join((name,pwd))) else: try: os.remove(filename) except: pass else: tkinter.messagebox.showerror('警告',message='用户名或密码错误') #创建按钮组件,同时设置按钮事件处理函数 buttonOk = tkinter.Button(root,text='Login',command=login) buttonOk.place(x=30,y=100,width=50,height=20) #取消按钮的事件处理函数 def cancel(): #清空用户输入的用户名和密码 varName.set('') varPwd.set('') buttonCancel = tkinter.Button(root,text='Cancel',command=cancel) buttonCancel.place(x=90,y=100,width=50,height=20) #启动消息循环 root.mainloop()
2、创建一个包含文本框、单选按钮、复选框、组合框、按钮和列表框等组件的GUI应用程序
运行后输入姓名,并选择班级、年级、性别及其班长信息等,单机Add按钮,就可以把
学生信息添加道列表框中,
''' 创建一个包含文本框、单选按钮、复选框、组合框、按钮和列表框等组件的GUI应用程序 运行后输入姓名,并选择班级、年级、性别及其班长信息等,单机Add按钮,就可以把 学生信息添加道列表框中, 再列表框中选择一项后单机DeleteSelection按钮,可以将其从列表框中删除 没有选中任何项二单机按钮则提示NoSelect ''' import tkinter import tkinter.ttk import tkinter.messagebox root = tkinter.Tk() root.title('学生信息选择框') root['width']=320 root['height']=400 labelName = tkinter.Label(root,text='Name:',justify=tkinter.RIGHT,width=50) labelName.place(x=10,y=5,width=50,height=20) varName = tkinter.StringVar(value='') entryName = tkinter.Entry(root,width=120,textvariable=varName) entryName.place(x=70,y=5,width=120,height=20) labelGrade = tkinter.Label(root,text='Grade:',justify=tkinter.RIGHT,width=50) labelGrade.place(x=10,y=40,width=50,height=20) studentClasses = {'1':['1','2','3','4'],'2':['1','2'],'3':['1','2','3']} comboGrade = tkinter.ttk.Combobox(root,values=tuple(studentClasses.keys()),width=50) comboGrade.place(x=70,y=40,width=50,height=20) def comboChange(event): #获取comboGrade选项框里面的数据 grade = comboGrade.get() if grade: comboClass["values"] = studentClasses.get(grade) else: comboClass.set([]) #绑定事件处理器函数 ''' geicomboGrade绑定了一个事件处理器(如果comboGrade被触发了,会调用comboChange()函数) comboChange会给comboClass这个选项框的value属性,附上值 tkinter.ttk.Combobox()这里面是没有command这个属性的,所以采用事件的方式触发方法 注意,这个方法必须再这个事件的前面:因为代码由上往下执行,这个方法存在才能够被调用 ''' comboGrade.bind('<<ComboboxSelected>>',comboChange) labelClass = tkinter.Label(root,text='Class',justify=tkinter.RIGHT,width=50) labelClass.place(x=130,y=40,width=50,height=20) comboClass = tkinter.ttk.Combobox(root,width=50) comboClass.place(x=190,y=40,width=50,height=20) labelSex = tkinter.Label(root,text='Sex:',justify=tkinter.RIGHT,width=50) labelSex.place(x=10,y=70,width=50,height=20) sex = tkinter.IntVar(value=1) radioMan = tkinter.Radiobutton(root,variable=sex,value=1,text='Man') radioMan.place(x=70,y=70,width=50,height=20) radioWoman = tkinter.Radiobutton(root,variable=sex,value=0,text='Woman') radioWoman.place(x=130,y=70,width=70,height=20) monitor = tkinter.IntVar(value=1) checkMonitor = tkinter.Checkbutton(root,text='Is Monitor?',variable=monitor,onvalue=1,offvalue=0) checkMonitor.place(x=20,y=100,width=100,height=20) def addInformation(): result = 'Name:'+entryName.get() result = result+';Grade:'+comboGrade.get() result = result+';Class:'+comboClass.get() result = result+';Sex:'+('Man' if sex.get() else 'Woman') result = result+';Monitor:'+('Yes' if monitor.get() else 'Wonmen') listboxStudents.insert(0,result) buttonAdd = tkinter.Button(root,text='Add',width=40,command=addInformation) buttonAdd.place(x=130,y=100,width=40,height=20) def deleteSelection(): #返回当前所指定的索引 selection = listboxStudents.curselection() if not selection: tkinter.messagebox.showinfo(title='Information',message='No Select') else: listboxStudents.delete(selection) buttonDelete = tkinter.Button(root,text='DeleteSelection',width=100,command=deleteSelection) buttonDelete.place(x=180,y=100,width=100,height=20) listboxStudents = tkinter.Listbox(root,width=300) listboxStudents.place(x=10,y=130,width=300,height=200) root.mainloop()