jiu
mi
吗?

登陆界面、学生信息记录界面——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()

 

posted @ 2023-01-02 22:59  不吃jiumi女孩  阅读(56)  评论(0编辑  收藏  举报