如何在Python Tkinter项目中实现点击按钮读取存储的用户信息功能
解决方案
你需要新增saved info按钮绑定的readbtn回调函数,处理文件读取和信息展示逻辑,完整可运行的修改后代码如下:
from tkinter import * from tkinter import messagebox def myexit(): app.destroy() def save(): info = {} info['Name'] = entry_name.get() info['Family'] = entry_family.get() if country1.get() == 1: info['Country_1'] = 'Italy' elif country1.get() == 2: info['Country_1'] = 'France' elif country1.get() == 3: info['Country_1'] = 'Germany' if country2.get() == 1: info['Country_2'] = 'Romania' elif country2.get() == 2: info['Country_2'] = 'Greek' elif country2.get() == 3: info['Country_2'] = 'Poland' info['Age'] = spin_age.get() if left_hand.get() == 1: info['Left_hand'] = 'is left hand' else: info['Left_hand'] = 'is right hand' f = open('information', 'a') f.write(str(info)) f.write('\n') f.close() def readbtn(): # 处理文件不存在的异常 try: with open('information', 'r', encoding='utf-8') as f: all_info = f.read() except FileNotFoundError: messagebox.showwarning('提示', '暂无存储的信息') return # 新建弹窗展示信息 info_win = Toplevel(app) info_win.title('存储的所有信息') info_win.geometry('500x400') # 文本组件,设置只读 text_box = Text(info_win, wrap=WORD) text_box.pack(fill=BOTH, expand=True, padx=10, pady=10) text_box.insert(END, all_info) text_box.config(state=DISABLED) app = Tk() app.geometry('400x300') spin_age = Spinbox(app, from_ = 1, to = 100, bg='pink', state='readonly') label_name = Label(app, text='name: ') label_family = Label(app, text='family: ') label_name.grid(row = 1, column=1) label_family.grid(row = 2, column=1) entry_name = Entry(app) entry_family = Entry(app) entry_name.grid(row=1, column=2) entry_family.grid(row=2, column=2) country1 = IntVar() country2 = IntVar() rb_italy = Radiobutton(app, text='Italy', variable=country1, value = 1) rb_france = Radiobutton(app, text='France', variable=country1, value = 2) rb_germany = Radiobutton(app, text='Germany', variable=country1, value = 3) rb_romania = Radiobutton(app, text='Romania', variable=country2, value = 1) rb_greek = Radiobutton(app, text='Greek', variable=country2, value = 2) rb_poland = Radiobutton(app, text='Poland', variable=country2, value=3) rb_italy.grid(row = 3, column=1, sticky='W') rb_france.grid(row = 4, column=1, sticky='W') rb_germany.grid(row = 5, column=1, sticky='W') rb_romania.grid(row = 3, column=2, sticky='W', padx=10) rb_greek.grid(row = 4, column=2, sticky='W', padx=10) rb_poland.grid(row = 5, column=2, sticky='W', padx=10) left_hand = IntVar() chbox_left_hand = Checkbutton(app, text='I am left hand', variable=left_hand) chbox_left_hand.grid(row = 6, column=1, pady=10) btnExit = Button(app, text='Exit', command=myexit) btnsave = Button(app, text='save', command=save) spin_age.grid(row=1, rowspan=2, column=3, sticky='NS') btnExit.grid(row=100, column=1) btnsave.grid(row=100, column=2) btnread = Button(app , text = 'saved info' , command = readbtn) btnread.place(x = 70 , y = 200) app.mainloop()
改动说明
- 新增了
readbtn回调函数,实现文件读取逻辑 - 增加了文件不存在的异常捕获,避免程序运行报错
- 采用独立弹窗展示所有存储的信息,文本框设置为只读状态,不影响主窗口原有功能
内容的提问来源于stack exchange,提问作者user16593312
相关产品推荐
相关产品推荐

