鱼C论坛

 找回密码
 立即注册
查看: 3086|回复: 5

【提问】Tkinter 获取Entry输入值 '%P'不起作用

[复制链接]
发表于 2022-8-29 20:10:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我尝试了
  1. from tkinter import *

  2. master = Tk()

  3. v = StringVar()

  4. def tes(content, reason, name):
  5.     if content == "小甲鱼":
  6.         print("正确!")
  7.         print(content, reason, name)
  8.         return True
  9.     else:
  10.         print("错误!")
  11.         print(content, reason, name)
  12.         return False

  13. tesCMD = master.register(tes)

  14. e1 = Entry(master,
  15.            textvariable=v,
  16.            validate="focusout",
  17.            validatecommand=(tesCMD, '%P','1','2'))
  18.            # %P表示 当输入框的值允许改变,该值有效。该值为当前文本框内容
  19.            # %v(小写大写不一样的),当前validate的值
  20.            # %W表示该组件的名字
  21. e2 = Entry(master)
  22. e1.pack(padx=10, pady=10)
  23. e2.pack(padx=10, pady=10)

  24. mainloop()
复制代码


可以运行
然后想在自己的代码中使用这个功能获取Entry内容并存入Excel,但不知道为什么存入excel的是字符串'%P'
下面是我的代码:
  1.         def find_loc(enter):
  2.             global wbname, locpoint
  3.             subjects = pd.read_excel("C:\\Users\\86136\\.spyder-py3\\被试信息管理\\被试信息管理\\subject_load.xlsx")
  4.             subject_id = subjects.values[-1][0]
  5.             wbname = str(subject_id) + '.xlsx'
  6.             subjects = pd.read_excel(
  7.                 "C:\\Users\\86136\\.spyder-py3\\被试信息管理\\被试信息管理\database\\{}".format(wbname))
  8.             titleline = list(subjects.keys())
  9.             locpoint = titleline.index(enter)

  10.         def data_to_excel(data,titlename):
  11.             find_loc(titlename)
  12.             wb = openpyxl.load_workbook(
  13.                 "C:\\Users\\86136\\.spyder-py3\\被试信息管理\\被试信息管理\\database\\{}".format(wbname))
  14.             ws = wb['basic_info']
  15.             ws.cell(row=2, column=locpoint + 1).value = data
  16.             wb.save("C:\\Users\\86136\\.spyder-py3\\被试信息管理\\被试信息管理\\database\\{}".format(wbname))
  17.             wb.close()
  18.                     
  19.         
  20.         def add_D():
  21.             if self.f1:
  22.                 self.f1.destroy()
  23.             self.f1 = tk.Frame(self.canvas)
  24.             self.myscrollbar=tk.Scrollbar(self.myframe,orient="vertical",command=self.canvas.yview)
  25.             self.canvas.configure(yscrollcommand=self.myscrollbar.set)
  26.             self.myscrollbar.pack(side="right",fill="y")
  27.             self.canvas.pack(side="left")
  28.             self.canvas.create_window((0,0),window=self.f1,anchor='nw')
  29.             self.f1.bind("<Configure>",self.myfunction)
  30.               
  31.             
  32.             with open("C:\\Users\\86136\\.spyder-py3\\被试信息管理\\被试信息管理\\UKbiobank题库\\D.txt", 'r', encoding='utf-8') as Dtxt:  # 只读方式打开编码为utf-8的文本文件
  33.                 number = 0  # 文本文件中的行号,即
  34.                 line = Dtxt.readlines()  # 以读取一行为列表方法读取全部行,line为分解好的列表内容
  35.                 Q_num = len(line)
  36.                 rownum = 0
  37.             for x in range(Q_num):
  38.                 str1 = line[x].split('*')
  39.                 id = str(number+1)+". "  # 题目序号
  40.                 self.la1 = tk.Label(self.f1, text=str1[0]+', '+str1[1]+', '+str1[2], justify="left", height=2,
  41.                               wraplength=500)  # 题目,靠左,多行左对齐
  42.                 self.la1.pack()

  43.                 op_num = len(str1)-3
  44.                 d2e = self.f1.register(data_to_excel)
  45.                 self.var = tk.IntVar()
  46.                 v = tk.StringVar()
  47.                 for i in range(0,op_num):
  48.                     if '___' in str1[i]:                       
  49.                         tk.Label(self.f1,text=str1[3]).pack()
  50.                         self.ra1_entry = tk.Entry(self.f1, textvariable=v, validate="focusout", validatecommand=(d2e,'%P',str1[0]))
  51.                         self.ra1_entry.pack()
  52.                     else:                       
  53.                         self.ra1 = tk.Radiobutton(self.f1, text=str(i+1)+', ' + str1[i+3], variable=self.var,
  54.                                                   value=i+1, justify="left", wraplength=430, command=(d2e,'%P',str1[0]))
  55.                         self.ra1.pack()   
  56.                
  57.                 rownum += op_num+1

  58.             self.thank=tk.Label(self.f1,text='请点击右下角的确认保存,然后点击左下角的菜单返回').pack()
  59.             self.btn1 = tk.Button(self.f1, text='菜单', command=menu)
  60.             self.btn1.pack(side='left')   
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-29 23:46:28 | 显示全部楼层
资源代码打包上传。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-30 17:50:16 | 显示全部楼层
ba21 发表于 2022-8-29 23:46
资源代码打包上传。

请问怎么上传?有哪个帖子有写吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-30 18:45:27 | 显示全部楼层
chenjl1 发表于 2022-8-30 17:50
请问怎么上传?有哪个帖子有写吗?

2022830_184512.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-30 19:14:55 | 显示全部楼层

新人好像传不了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-30 19:15:46 | 显示全部楼层
我发现了,Entry里的‘%P’是可以工作的,Radiobutton有没有类似功能的代码?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 16:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表