我使用ComboBox
作为更大GUI的一部分,用python / tkinter编写。
当更改下拉选项时,颜色会更新,以向用户表明某些内容已发生变化。
但是,组合框还允许用户键入自己的值。 我还希望在发生这种情况时改变颜色。
问题是,我在the ComboBox
documentation中没有看到任何指示如何执行此操作的内容。
答案 0 :(得分:9)
您可以使用StringVar作为Combobox构造函数的参数。可以跟踪此StringVar(即,订阅每个更改)。
这是一个小例子:
from Tkinter import *
from ttk import *
def on_field_change(index, value, op):
print "combobox updated to ", c.get()
root = Tk()
v = StringVar()
v.trace('w',on_field_change)
c = Combobox(root, textvar=v, values=["foo", "bar", "baz"])
c.pack()
mainloop()
答案 1 :(得分:3)
我注意到在Python Tkinter
文档的某个地方,它提到ComboBox
是Entry
的子类。
使用Entry
,这就是你所做的。设置配置:
-validatecommand
应设置为按下某个键时要发生的事情(在我的情况下,更改颜色)。-validate
应设置为key
,这意味着只要在光标位于条目中时按下某个键,就会调用验证命令。Here's文本条目上的tk页面供进一步参考。
对于组合框执行完全相同的操作的方式也是一样的(据我所知)。
答案 2 :(得分:2)
只需将<>绑定到方法...
import tkinter as tk
from tkinter import ttk
class Main(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.container = tk.Frame(self)
self.container.pack(side="top", fill = "both", expand=True)
self.container.grid_rowconfigure(0, weight=1)
self.container.grid_columnconfigure(0, weight=1)
self.cb=ttk.Combobox(self.container, values=[0,1, 2, 3] , state='readonly')
self.cb.bind('<<ComboboxSelected>>', self.modified)
self.cb.pack()
def modified (self, event) :
print(self.cb.get())
main = Main()
main.mainloop()