【tkinter】填坑 解决Entry、Label不能修改text、image等属性的问题

本文详细解析了在Tkinter中如何正确地使用Entry控件进行布局,并介绍了通过属性操作来获取和修改控件内容的方法。文章强调了正确的控件定义方式,对比了不同布局方法对控件操作的影响。

tkinter中定义一个输入,如:
input =Entry(root).pack()

不等于以下定义

input =Entry(root) input.pack()

后者定义后直接布局,返回的不是Entry()控件本身,没有entry所有的一些方法如get()等

 

按照前者定义 input =Entry(root).pack() 后,可利用input.get() 获得输入框的文本信息。

利用 input['text']可修改Entry()文本框的文本内容。Label等控件同理,如法还可以修改Label['image']实现动态显示图片等操作。

import tkinter from tkinter import ttk from tkinter import messagebox from tkinter import * import csv #定义公共变量 global k,maxrecno,xm,xb,nl,rw,sx,yy,item_id,cr1,image1,image2,image3,label11,jpgname def add_student(): #录入数据 global maxrecno,xm,xb,nl,rw,sx,yy def search_student(): #查询 global maxrecno,xm,xb,nl,rw,sx,yy def delete_student(): #删除 global maxrecno,xm,xb,nl,rw,sx,yy def update_student(): #修改 global maxrecno,xm,xb,nl,rw,sx,yy def brows_student(): #浏览 #清空tree clear1() #往tree中填入数据,以显示 with open('students.csv', 'r', newline='') as file: reader = csv.reader(file) i=1 for row in reader: tree.insert('',i,text=i,values=(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9],row[10],row[11])) i+=1 def view_student():#定义视图 global maxrecno,xm,xb,nl,rw,sx,yy def clear(): #把10个接收窗口清空 entry1.delete(0,len(entry1.get())) entry2.delete(0,len(entry2.get())) entry3.delete(0,len(entry3.get())) entry4.delete(0,len(entry4.get())) entry5.delete(0,len(entry5.get())) entry6.delete(0,len(entry6.get())) entry7.delete(0,len(entry7.get())) entry8.delete(0,len(entry8.get())) entry9.delete(0,len(entry9.get())) entry10.delete(0,len(entry10.get())) def clear1(): #清空tree.insert() x1 = tree.get_children() for item in x1: tree.delete(item) k=1 def Login():#登录函数 global k Name = enterName.get() Pwd = enterPwd.get() if Name=='admin' and Pwd=='admin': window.wm_deiconify() #显示window主窗口 win2.withdraw() #隐藏win2登录子窗口 if k==3: messagebox.showerror('温馨提示','用户名或者密码输错3次了,你是在尝试? 退出!') Cancel() k+=1 def Cancel():#退出函数 win2.quit() window.quit() #退出 window.destroy() #撒销进程 window = Tk() window.title("学生管理系统") window.geometry('1200x520+200+10') #定义命令按键 button0 = ttk.Button(window, text="清空录入区") button1 = ttk.Button(window, text="录入") button2 = ttk.Button(window, text="查询") button3 = ttk.Button(window, text="删除") button4 = ttk.Button(window, text="修改") button5 = ttk.Button(window, text="浏览数据") button6 = ttk.Button(window, text="统计视图") button0.place(x=300, y=450) button1.place(x=390, y=450) button2.place(x=480, y=450) button3.place(x=570, y=450) button4.place(x=660, y=450) button5.place(x=750, y=450) button6.place(x=840, y=450) #利用ttk的特性设置动感按键 style = ttk.Style(window) style.map('TButton',foreground=[('pressed', 'blue'),('active', 'red')]) #定义标签 L1 = Label(window, text='姓名:') L2 = Label(window, text='性别:') L3 = Label(window, text='年龄:') L4 = Label(window, text='籍贯:') L5 = Label(window, text='住址:') L6 = Label(window, text='电话:') L7 = Label(window, text='语文:') L8 = Label(window, text='数学:') L9 = Label(window, text='英语:') L10 = Label(window, text='总分:') L11 = Label(window, text=' 数 据 录 入 区 ',fg='red') L12 = Label(window, text=' 数 据 浏 览 区 ',fg='red') L13 = Label(window, text='相片') L1.place(x=10,y=50) L2.place(x=10,y=80) L3.place(x=10,y=110) L4.place(x=10,y=140) L5.place(x=10,y=170) L6.place(x=10,y=200) L7.place(x=10,y=230) L8.place(x=10,y=260) L9.place(x=10,y=290) L10.place(x=10,y=320) L11.place(x=40,y=15) L12.place(x=600,y=15) L13.place(x=85,y=490) #定义单行文本框 entry1 = ttk.Entry(window) entry2 = ttk.Entry(window) entry3 = ttk.Entry(window) entry4 = ttk.Entry(window) entry5 = ttk.Entry(window) entry6 = ttk.Entry(window) entry7 = ttk.Entry(window) entry8 = ttk.Entry(window) entry9 = ttk.Entry(window) entry10 = ttk.Entry(window) entry1.place(x=55,y=50) entry2.place(x=55,y=80) entry3.place(x=55,y=110) entry4.place(x=55,y=140) entry5.place(x=55,y=170) entry6.place(x=55,y=200) entry7.place(x=55,y=230) entry8.place(x=55,y=260) entry9.place(x=55,y=290) entry10.place(x=55,y=320) #创建tree表格,显示记录 tree =ttk.Treeview(window,show="headings",selectmode="browse",height=18) #只显示表头show="headings",height为tree窗口高度 #为tree设置垂直滚动条 yscrollbar = Scrollbar(window)#定义一个垂直滚动条 yscrollbar.pack(side=RIGHT,fill=Y)#放置在右边,亲充满 yscrollbar.config(command=tree.yview)#设置游动条的command回调函数yview() tree.configure(yscrollcommand=yscrollbar.set)#垂直游动条绑定多行文本框 #给tree指定位置(不能前于垂直滚动条,注意先后次序) tree.pack(padx=(230,10),pady=(50,30)) #指定位置x方向左230、右20,上50、下30,宽度为900-230-10=660 #定义一个tre表格框架 tree['columns']=('序号','姓名','性别','年龄','籍贯','住址','电话','语文','数学','英语','总分','相片名称') #设置列,总宽为900-230-10=660 tree.column('序号',width=50,anchor="center") tree.column('姓名',width=50,anchor="center") tree.column('性别',width=50,anchor="center") tree.column('年龄',width=50,anchor="center") tree.column('籍贯',width=50,anchor="center") tree.column('住址',width=200,anchor="center") tree.column('电话',width=100,anchor="center") tree.column('语文',width=70,anchor="center") tree.column('数学',width=70,anchor="center") tree.column('英语',width=70,anchor="center") tree.column('总分',width=70,anchor="center") tree.column('相片名称',width=100,anchor="center") #设置表头 tree.heading('序号',text='序号') tree.heading('姓名',text='姓名') tree.heading('性别',text='性别') tree.heading('年龄',text='年龄') tree.heading('籍贯',text='籍贯') tree.heading('住址',text='住址') tree.heading('电话',text='电话') tree.heading('语文',text='语文') tree.heading('数学',text='数学') tree.heading('英语',text='英语') tree.heading('总分',text='总分') tree.heading('相片名称',text='相片名称') #定义与tree关联的鼠标事件,通过鼠标在tree中选择,把选中的记录转入左边7个单行文本框内显示 def mouseselect(event): global item_id,cr1,jpgname # 获取选中项的ID item_id = event.widget.selection()[0] # 获取该项的所有列的值 cr1 = event.widget.item(item_id, "values") #把7个接收窗口清空 clear() #通过鼠标选择,把记录内容放进单行文本框 entry1.insert(0,cr1[1]) entry2.insert(0,cr1[2]) entry3.insert(0,cr1[3]) entry4.insert(0,cr1[4]) entry5.insert(0,cr1[5]) entry6.insert(0,cr1[6]) entry7.insert(0,cr1[7]) entry8.insert(0,cr1[8]) entry9.insert(0,cr1[9]) entry10.insert(0,cr1[10]) jpgname=cr1[11] showjpg() tree.bind('<<TreeviewSelect>>',mouseselect) #tree绑定鼠标单击 #定义登录窗口 win2=tkinter.Toplevel(window) win2.title('登录验证') win2.config(background="LavenderBlush") win2.geometry('270x170+800+200') #10左距离 10上距离 # 创建登录账户的标签 labname = tkinter.Label(win2,text=' 用户名 ',justify=tkinter.RIGHT,bg='pink',width=10) labPwd = tkinter.Label(win2,text=' 密 码',justify=tkinter.RIGHT,bg='pink',width=10) labname.place(x=40,y=20) labPwd.place(x=40,y=50) # label 标签(用户名和密码的变量) varName = StringVar() # 文字变量储存器器 varName.set('guest') varPwd = StringVar() varPwd.set('123456') # 创建登录文本框,同时设置关联变量 enterName = tkinter.Entry(win2,width=12,textvariable=varName) enterPwd = tkinter.Entry(win2,show='*',width=12,textvariable=varPwd) enterName.place(x=130,y=20) enterPwd.place(x=130,y=50) # 创建登录按钮组件,并且设置按钮事件的处理函数 bOK = tkinter.Button(win2,text = '登录',bg='lightskyblue',width=7,command =Login) bCancel =tkinter.Button(win2,text='退出',bg='lightgray',width=7,command=Cancel) bOK.place(x=60 , y=100) bCancel.place(x=150,y=100) #首次进入系统,先显示数据 brows_student() window.withdraw() #隐藏window主窗口 win2.wm_deiconify() #显示win2登录子窗口 window.mainloop() 增加创新
最新发布
06-27
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值