如何解决使用tkinter python在另一个组合框中填充一个组合框
from tkinter import *
from tkinter.ttk import Combobox
v1=[]
root = Tk()
root.geometry('500x500')
frame1=Frame(root,bg='#80c1ff',bd=5)
frame1.place(relx=0.5,rely=0.1,relwidth=0.75,relheight=0.1,anchor='n')
lower_frame=Frame(root,bd=10)
lower_frame.place(relx=0.5,rely=0.25,relheight=0.6,anchor='n')
v=[]
def maincombo():
Types=["MA","MM","MI","SYS","IN"]
combo1=Combobox(frame1,values=Types)
combo1.place(relx=0.05,rely=0.25)
combo2=Combobox(frame1,values=v)
combo2.bind('<<ComboboxSelected>>',combofill)
combo2.place(relx=0.45,rely=0.25)
def combofill():
if combo1.get()=="MA":
v=[1,2,3,45]
combo2=Combobox(frame1,values=v)
combo2.place(relx=0.45,rely=0.25)
if combo1.get()=="MM":
v=[5,6,7,8,9]
combo2=Combobox(frame1,rely=0.25)
maincombo()
root.mainloop()
我想根据其他组合框I,e类型的选择来填充一个组合框,但是用简单的函数却无法完成。
解决方法
查看您的代码,您所需要的大部分已经存在。我所做的更改如下:
- 绑定到
combo1
而不是combo2
(因为combo1
是您要监视的那个) - 将
combo1
和combo2
设置为全局变量(以便可以在combofill
方法中使用它们) - 设置
combofill
方法以接受event
arg(否则将引发TypeError
) - 在
.config
上使用combo2
方法,而不是每次都创建一个新方法 - 在未选择“ MA”或“ MM”的情况下,将
combo2
设置为空
这是我的实现方式:
from tkinter import *
from tkinter.ttk import Combobox
v1=[]
root = Tk()
root.geometry('500x500')
frame1=Frame(root,bg='#80c1ff',bd=5)
frame1.place(relx=0.5,rely=0.1,relwidth=0.75,relheight=0.1,anchor='n')
lower_frame=Frame(root,bd=10)
lower_frame.place(relx=0.5,rely=0.25,relheight=0.6,anchor='n')
v=[]
def maincombo():
global combo1,combo2
Types=["MA","MM","MI","SYS","IN"]
combo1=Combobox(frame1,values=Types)
combo1.place(relx=0.05,rely=0.25)
combo1.bind('<<ComboboxSelected>>',combofill)
combo2=Combobox(frame1,values=v)
combo2.place(relx=0.45,rely=0.25)
def combofill(event):
if combo1.get()=="MA":
v=[1,2,3,45]
elif combo1.get()=="MM":
v=[5,6,7,8,9]
else:
v=[]
combo2.config(values=v)
maincombo()
root.mainloop()
还有其他一些想法可供将来考虑:
-
我建议使用
grid
管理器,而不是place
管理器,因为它会阻止小部件重叠等。(在我的系统上,combo2
会稍微覆盖{{1 }}) -
使用字典而不是
combo1
,然后使用if ... v=... elif ... v= ...
方法,以便提供get
参数。例如:default
编辑:
针对评论中的问题,以下是我如何根据要求使用逗号分隔值制作“切换组合框”的实现。
由于调用我们的v={"MA": [1,45],"MM": [5,9]}. \
get(combo1.get(),[])
绑定时组合框已经覆盖了文本区域的值,因此我必须添加一个文本变量trace,以便我们可以跟踪文本区域的先前值(因此,附加新值等)。我很确定解释是完全不够的,所以:如果有疑问,请看一下代码!
<<ComboboxSelected>>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。