鱼C论坛

 找回密码
 立即注册
查看: 2756|回复: 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这样
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()时,窗口才会显示出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-12 23:44:31 | 显示全部楼层    本楼为最佳答案   
网上搜了下,貌似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()时,窗口才会显示出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-13 08:23:44 | 显示全部楼层
疾风怪盗 发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2021-1-5 11:31:39 | 显示全部楼层
获取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 [index =2] to shows up when win generated
cbx_2.current(2)

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 21:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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