You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:42:01