Tkinter 中combobox能否实现自动补齐推荐?
比如下拉菜单里有,福建,福州,福利。。。。等等,当我们输入福,下边就推荐带有福字的选项。
不知道能否实现,网上搜半天没找到答案。
网上搜了下,貌似TK的Combobox没有currentText()这种方法,据说QT里是有的
那是不是可以换一种方式,不要自动联想,用按钮来联想,输入一个东西,通过按钮的事件,找到相应设置好的数据,形成列表后赋值给下拉框
比如:输入1,下拉框就是1,11,111,输入2,下拉框就是2,22,222这样
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.title("Python GUI")# 添加标题
label1 = ttk.Label(win, text="Chooes a number")
label1.grid(column=1, row=0)# 添加一个标签,并将其列设置为1,行设置为0
# button被点击之后会被执行
def clickMe():# 当acction被点击时,该函数则生效【显示当前选择的数】
if number.get() == '1':# 判断列表当前所选~~~~~~~~~~~
label1.config(text="选了1")# 【注意,上面的label1如果直接.grid会出错】
numberChosen['values'] = (1,11,111)# 设置下拉列表的值
if number.get() == '2':
label1.config(text="选了2")
numberChosen['values'] = (2, 22, 222)# 设置下拉列表的值
if number.get() == '3':
label1.config(text="选了3")
numberChosen['values'] = (3, 33, 333)# 设置下拉列表的值
# 按钮
action = ttk.Button(win, text="Click Me!", command=clickMe)# 创建一个按钮, text:显示按钮上面显示的文字, command:当这个按钮被点击之后会调用command函数
action.grid(column=2, row=1)# 设置其在界面中出现的位置column代表列 row 代表行
# 创建一个下拉列表
number = tk.StringVar()
numberChosen = ttk.Combobox(win, width=12, textvariable=number)
numberChosen.grid(column=1, row=1)# 设置其在界面中出现的位置column代表列 row 代表行
win.mainloop()# 当调用mainloop()时,窗口才会显示出来 疾风怪盗 发表于 2020-10-12 23:44
网上搜了下,貌似TK的Combobox没有currentText()这种方法,据说QT里是有的
那是不是可以换一种方式,不要 ...
感谢@疾风怪盗
你这个也是个路子。
我后来选择的是,一级一级往下选。
下面是两个combobox,选了1里边的某个,然后2里边出现1的子集;以此类推
import tkinter as tk
import tkinter.ttk as ttk
win = tk.Tk()
win.title("Python GUI")# 添加标题
cv = tk.StringVar()
cv1 = tk.StringVar()
label1 = tk.Label(win,text='工序:',font=("等线", 16)).grid(row=2,column=1,padx=5,pady=10,stick='W')
co1 = ttk.Combobox(win,font=("等线", 16),textvariable=cv)
co1.grid(row=2,column=2,padx=5,pady=10,stick='W')
co1['value']=('包带','包装','编织')
label5 = tk.Label(win,text='缺陷:',font=("等线", 16)).grid(row=3,column=1,padx=5,pady=10,stick='W')
co2 = ttk.Combobox(win,font=("等线", 16),textvariable=cv1)
co2.grid(row=3,column=2,padx=5,pady=10,stick='W')
def func(event):
if co1.get()=='包带':
co2['value']=('原材料问题', '装盘', '损伤线芯')
elif co1.get()=='包装':
co2['value']=('盘具撞伤', '盘具标识', '装盘')
elif co1.get()=='编织':
co2['value']=('原材料问题', '装盘', '编织密度')
co1.bind("<<ComboboxSelected>>", func)
win.mainloop() 期待各位其他的回复。。。 获取combobox输入值
第一个下拉框,写入输入值后,再次选择的时候能打印出上次输入的内容。
有没有办法,绑定到回车上,输入完回车就拿到这个数据呢?
from tkinter import *
from tkinter import ttk
# Create an instance
win = Tk()
win.title("Learn Combobox")
# create a Label
lb1 = Label(win, text="Below is a combobox 1", font="tahoma 12 normal")
lb1.grid(column=0, row=0, padx=8, pady=4)
def show_select_1():
print("post_command: show_select")
print(value.get())
# Define tkinter data type
data = ["a", "b", "c"]
value = StringVar()
# Create a combobox, and tighter it to value
cbx_1 = ttk.Combobox(win, width=12, height=8, textvariable=value, postcommand=show_select_1)
cbx_1.grid(column=0, row=1)
# add data to combobox
cbx_1["values"] = data
# ======================================================================================================
# create a Label
lb2 = Label(win, text="Below is a combobox 2", font="tahoma 12 normal")
lb2.grid(column=0, row=4, padx=8, pady=4)
def show_data_2(*args):
print("Event: ComboboxSelected")
print(cbx_2.get())
# Define tkinter data type
data2 = ["a2", "b2", "c2", "d2", "e2"]
# Create a combobox, and tighter it to value
cbx_2 = ttk.Combobox(win, width=12, height=8)
cbx_2.grid(column=0, row=5)
# set cbx_2 as readonly
cbx_2.configure(state="readonly")
# add data to combobox
cbx_2["values"] = data2
# set the initial data to shows up when win generated
cbx_2.current(2)
# bind a event
cbx_2.bind("<<ComboboxSelected>>", show_data_2)
win.mainloop()
页:
[1]