python - 将entry()值转换为大写

时间:2017-05-22 05:51:14

标签: python tkinter

我想让我在Entry字段上键入的值自动转换为大写。我这里的代码只接受使用validatecommand在条目中键入的大写字母。

from tkinter import *

root = Tk()
def text(a,b,c):
    ind=int(b)
    if c == '1': #insert
        if not a[ind].isupper():
            return False
    return True

 entry = Entry(root, validate="key")
 entry['validatecommand'] = (entry.register(text),'%P','%i','%d')
 entry.pack()

root.mainloop()

2 个答案:

答案 0 :(得分:1)

如果您想将条目内容转换为大写而不是阻止用户插入非大写字母,您可以将StringVar与您的条目相关联并使用其tracetrace_add因为python 3.6)每次用户修改条目时将条目内容转换为大写的方法。

trace有两个参数:模式和回调。该模式确定何时调用回调。模式是:

  • 'w''write' for python 3.6):在写入变量时调用回调(这是我在下面的代码中使用的模式),
  • 'r''read'):在读取变量时调用回调,
  • 'u''unset'):删除变量时调用回调

有关回调参数的更多详细信息,请参阅What are the arguments to Tkinter variable trace method callbacks?

import tkinter as tk

def to_uppercase(*args):
    var.set(var.get().upper())

root = tk.Tk()

var = tk.StringVar(root)
e = tk.Entry(root, textvariable=var)
e.pack()
try:
    # python 3.6
    var.trace_add('write', to_uppercase)
except AttributeError:
    # python < 3.6
var.trace('w', to_uppercase)

root.mainloop()

答案 1 :(得分:0)

您可以绑定到事件而不是使用.trace(在python 3.x中,未在2.x中测试)。

以下是从接受的答案(由“bevdet”)复制到的verbatum https://bytes.com/topic/python/answers/897918-how-do-i-make-tkinter-text-entry-all-uppercase

您可以将事件绑定到调用函数的窗口小部件,以将文本转换为大写。 您需要初始化Entry小部件的textvariable。在你的情况下,没有别的东西需要关注,否则你可以绑定&lt; FocusOut&gt;到小部件。 &LT; KeyRelease&gt;但是效果很好。

from Tkinter import *
win = Tk()

def caps(event):
    v.set(v.get().upper())

Label(win, text='Enter user nick:').pack(side=LEFT)
v = StringVar()
w = Entry(win, width=20, textvariable=v)
w.pack(side=LEFT)
w.bind("<KeyRelease>", caps)

mainloop()

我能够将此方法与自定义验证结合使用(参见B. Oakley回答 Interactively validating Entry widget content in tkinter)在创建Entry小部件后立即将绑定OUTSIDE放置在验证函数中。 重要提示:不要将绑定放在验证函数中,否则会破坏验证函数(请参阅Python tkInter Entry fun的已接受答案以获取解释和可能的解决方法)。