from tkinter import *
from tkinter.ttk import *
# 新建窗口
root = Tk()
# 默认数据
name = '张三'
age = '40'
record = {'姓名': name, '年龄': age}
def refresh_name(self, *args):
'''
更新字典里的名字
'''
record['姓名'] = content_name.get()
print(record)
def refresh_age(self, *args):
'''
更新字典里的年龄
'''
record['年龄'] = content_age.get()
print(record)
# 新建姓名标签与空格
Label(root, text='姓名').grid(pady=10, row = 1, column = 1, sticky = E)
content_name = StringVar()
content_name.set(record['姓名'])
content_name_blk = Entry(root, textvariable = content_name, width = 10)
content_name_blk.grid(pady=10, row = 1, column = 2, sticky = W)
content_name_blk.bind('<KeyRelease>', refresh_name) # 当输入文字后更新字典
# 新建年龄标签与空格
Label(root, text='年龄').grid(pady=10, row = 1, column = 3, sticky = E)
content_age = StringVar()
content_age.set(record['年龄'])
content_age_blk = Entry(root, textvariable = content_age, width = 10)
content_age_blk.grid(pady=10, row = 1, column = 4, sticky = W)
content_age_blk.bind('<KeyRelease>', refresh_age) # 当输入文字后更新字典
root.mainloop()
from tkinter import *
from tkinter.ttk import *
# 新建窗口
root = Tk()
# 默认数据
name = '张三'
age = '40'
record = {'姓名': name, '年龄': age}
class Blank:
'''
新建填空类,由标签和空格2部分组成。功能:每输入一个字,自动更新record字典。
'''
def __init__(self, name, row, column, content = StringVar()):
self.name = name # 标签名
self.row = row
self.column = column
Label(root, text=self.name).grid(pady=10, row = self.row, column = self.column, sticky = E) # 新建标签
self.content = content
self.content.set(record[self.name]) # 根据record字典填入空格内容
a = Entry(root, textvariable = self.content, width = 10) # 新建空格,自动填写空格内容
a.grid(pady=10, row = self.row, column = self.column + 1, sticky = W)
a.bind('<KeyRelease>', self.refresh) # 当输入文字后更新字典
def refresh(self, *args):
'''
更新字典
'''
record[self.name] = self.content.get()
print(record)
name_blk = Blank('姓名', 1, 1)
age_blk = Blank('年龄', 1, 3)
root.mainloop()
因为在Blank类的初始化函数里,content = StringVar() 相当于是一个常量,每个Blank实例如果不指定content实参,都会默认指向同一个StringVar实例。
如果你在传参的时候创建StringVar()实例就没这个问题了。
name_blk = Blank('姓名', 1, 1,StringVar())
age_blk = Blank('年龄', 1, 3,StringVar())