鱼C论坛

 找回密码
 立即注册
查看: 2193|回复: 4

[已解决]Tkinter 中combobox能否实现自动补齐推荐?

[复制链接]
发表于 2020-10-12 22:34:59 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
比如下拉菜单里有,福建,福州,福利。。。。等等,
当我们输入福,下边就推荐带有福字的选项。

不知道能否实现,网上搜半天没找到答案。
最佳答案
2020-10-12 23:44:31
网上搜了下,貌似TK的Combobox没有currentText()这种方法,据说QT里是有的
那是不是可以换一种方式,不要自动联想,用按钮来联想,输入一个东西,通过按钮的事件,找到相应设置好的数据,形成列表后赋值给下拉框
比如:输入1,下拉框就是1,11,111,输入2,下拉框就是2,22,222这样
  1. import tkinter as tk
  2. from tkinter import ttk

  3. win = tk.Tk()
  4. win.title("Python GUI")  # 添加标题

  5. label1 = ttk.Label(win, text="Chooes a number")
  6. label1.grid(column=1, row=0)  # 添加一个标签,并将其列设置为1,行设置为0

  7. # button被点击之后会被执行
  8. def clickMe():  # 当acction被点击时,该函数则生效【显示当前选择的数】
  9.     if number.get() == '1':  # 判断列表当前所选~~~~~~~~~~~
  10.         label1.config(text="选了1")  # 【注意,上面的label1如果直接.grid会出错】
  11.         numberChosen['values'] = (1,11,111)  # 设置下拉列表的值
  12.     if number.get() == '2':
  13.         label1.config(text="选了2")
  14.         numberChosen['values'] = (2, 22, 222)  # 设置下拉列表的值
  15.     if number.get() == '3':
  16.         label1.config(text="选了3")
  17.         numberChosen['values'] = (3, 33, 333)  # 设置下拉列表的值

  18. # 按钮
  19. action = ttk.Button(win, text="Click Me!", command=clickMe)  # 创建一个按钮, text:显示按钮上面显示的文字, command:当这个按钮被点击之后会调用command函数
  20. action.grid(column=2, row=1)  # 设置其在界面中出现的位置  column代表列   row 代表行

  21. # 创建一个下拉列表
  22. number = tk.StringVar()
  23. numberChosen = ttk.Combobox(win, width=12, textvariable=number)
  24. numberChosen.grid(column=1, row=1)  # 设置其在界面中出现的位置  column代表列   row 代表行

  25. win.mainloop()  # 当调用mainloop()时,窗口才会显示出来
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-12 23:44:31 | 显示全部楼层    本楼为最佳答案   
网上搜了下,貌似TK的Combobox没有currentText()这种方法,据说QT里是有的
那是不是可以换一种方式,不要自动联想,用按钮来联想,输入一个东西,通过按钮的事件,找到相应设置好的数据,形成列表后赋值给下拉框
比如:输入1,下拉框就是1,11,111,输入2,下拉框就是2,22,222这样
  1. import tkinter as tk
  2. from tkinter import ttk

  3. win = tk.Tk()
  4. win.title("Python GUI")  # 添加标题

  5. label1 = ttk.Label(win, text="Chooes a number")
  6. label1.grid(column=1, row=0)  # 添加一个标签,并将其列设置为1,行设置为0

  7. # button被点击之后会被执行
  8. def clickMe():  # 当acction被点击时,该函数则生效【显示当前选择的数】
  9.     if number.get() == '1':  # 判断列表当前所选~~~~~~~~~~~
  10.         label1.config(text="选了1")  # 【注意,上面的label1如果直接.grid会出错】
  11.         numberChosen['values'] = (1,11,111)  # 设置下拉列表的值
  12.     if number.get() == '2':
  13.         label1.config(text="选了2")
  14.         numberChosen['values'] = (2, 22, 222)  # 设置下拉列表的值
  15.     if number.get() == '3':
  16.         label1.config(text="选了3")
  17.         numberChosen['values'] = (3, 33, 333)  # 设置下拉列表的值

  18. # 按钮
  19. action = ttk.Button(win, text="Click Me!", command=clickMe)  # 创建一个按钮, text:显示按钮上面显示的文字, command:当这个按钮被点击之后会调用command函数
  20. action.grid(column=2, row=1)  # 设置其在界面中出现的位置  column代表列   row 代表行

  21. # 创建一个下拉列表
  22. number = tk.StringVar()
  23. numberChosen = ttk.Combobox(win, width=12, textvariable=number)
  24. numberChosen.grid(column=1, row=1)  # 设置其在界面中出现的位置  column代表列   row 代表行

  25. win.mainloop()  # 当调用mainloop()时,窗口才会显示出来
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-13 08:23:44 | 显示全部楼层
疾风怪盗 发表于 2020-10-12 23:44
网上搜了下,貌似TK的Combobox没有currentText()这种方法,据说QT里是有的
那是不是可以换一种方式,不要 ...


感谢@疾风怪盗

你这个也是个路子。
我后来选择的是,一级一级往下选。
下面是两个combobox,选了1里边的某个,然后2里边出现1的子集;以此类推
  1. import tkinter as tk
  2. import tkinter.ttk as ttk

  3. win = tk.Tk()
  4. win.title("Python GUI")  # 添加标题
  5. cv = tk.StringVar()
  6. cv1 = tk.StringVar()
  7. label1 = tk.Label(win,text='工序:',font=("等线", 16)).grid(row=2,column=1,padx=5,pady=10,stick='W')
  8. co1 = ttk.Combobox(win,font=("等线", 16),textvariable=cv)
  9. co1.grid(row=2,column=2,padx=5,pady=10,stick='W')
  10. co1['value']=('包带','包装','编织')

  11. label5 = tk.Label(win,text='缺陷:',font=("等线", 16)).grid(row=3,column=1,padx=5,pady=10,stick='W')
  12. co2 = ttk.Combobox(win,font=("等线", 16),textvariable=cv1)
  13. co2.grid(row=3,column=2,padx=5,pady=10,stick='W')
  14. def func(event):
  15.     if co1.get()=='包带':
  16.         co2['value']=('原材料问题', '装盘', '损伤线芯')
  17.     elif co1.get()=='包装':
  18.         co2['value']=('盘具撞伤', '盘具标识', '装盘')
  19.     elif co1.get()=='编织':
  20.         co2['value']=('原材料问题', '装盘', '编织密度')
  21. co1.bind("<<ComboboxSelected>>", func)

  22. win.mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-13 08:24:41 | 显示全部楼层
期待各位其他的回复。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-5 11:31:39 | 显示全部楼层
获取combobox输入值
第一个下拉框,写入输入值后,再次选择的时候能打印出上次输入的内容。
有没有办法,绑定到回车上,输入完回车就拿到这个数据呢?

  1. from tkinter import *
  2. from tkinter import ttk

  3. # Create an instance
  4. win = Tk()
  5. win.title("Learn Combobox")

  6. # create a Label
  7. lb1 = Label(win, text="Below is a combobox 1", font="tahoma 12 normal")
  8. lb1.grid(column=0, row=0, padx=8, pady=4)


  9. def show_select_1():
  10.     print("post_command: show_select")
  11.     print(value.get())


  12. # Define tkinter data type
  13. data = ["a", "b", "c"]
  14. value = StringVar()

  15. # Create a combobox, and tighter it to value
  16. cbx_1 = ttk.Combobox(win, width=12, height=8, textvariable=value, postcommand=show_select_1)
  17. cbx_1.grid(column=0, row=1)

  18. # add data to combobox
  19. cbx_1["values"] = data

  20. # ======================================================================================================
  21. # create a Label
  22. lb2 = Label(win, text="Below is a combobox 2", font="tahoma 12 normal")
  23. lb2.grid(column=0, row=4, padx=8, pady=4)


  24. def show_data_2(*args):
  25.     print("Event: ComboboxSelected")
  26.     print(cbx_2.get())


  27. # Define tkinter data type
  28. data2 = ["a2", "b2", "c2", "d2", "e2"]

  29. # Create a combobox, and tighter it to value
  30. cbx_2 = ttk.Combobox(win, width=12, height=8)
  31. cbx_2.grid(column=0, row=5)

  32. # set cbx_2 as readonly
  33. cbx_2.configure(state="readonly")

  34. # add data to combobox
  35. cbx_2["values"] = data2
  36. # set the initial data [index =2] to shows up when win generated
  37. cbx_2.current(2)

  38. # bind a event
  39. cbx_2.bind("<<ComboboxSelected>>", show_data_2)

  40. win.mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 09:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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