Tkinter输入的第一个字母

时间:2012-09-20 16:47:01

标签: python input tkinter

我的程序应检查输入字的前三个字母是否与预定义字相似 我已经用Tkinter制作了一个GUI,想要获取输入字段的字母 不知何故,我不能像没有Tkinter那样实现它。

我是如何为shell做的:

text = raw_input('Enter a word: ')

if (text[0] + text[1] + text[2] == 'sag'):
    print "sagen"
else:
    print "error"

所以,当我输入单词" sagst"它检查前三个字母,并且应该放出" sagen"。工作正常。

我了解到,例如inputfield.get()获取条目" inputfield"的输入 但是如何查看该字母的第一个字母" inputfield"?
一小部分选择:

from Tkinter import*
root = Tk()

def check():
    if (text[0] + text[1] + text[2] == 'sag'):
        print "True"
    else:
        print "False"

inputfield = Entry(root)
inputfield.pack()

but = Button(root,text='Check!', command = check)
but.pack()

text = inputfield.get()

root.mainloop()

不起作用......

我希望你能理解我的问题并尽快回答。 (抱歉我的英语不好,我的Python技能不好);-)
谢谢!

4 个答案:

答案 0 :(得分:3)

按下按钮后,您的check功能必须检索文本字段

def check():
    text = inputfield.get()
    print text.startswith('sag')

我使用.startswith()稍微更改了测试,并直接打印了该测试的结果(print会将boolean TrueFalse转换为匹配的字符串。)< / p>

您的代码中发生的是您定义inputfield,检索它的内容(显然为空),只有然后通过运行mainloop来显示TKInter GUI窗口。用户永远不会有机会以这种方式输入任何文本。

答案 1 :(得分:2)

您也可以在不需要按钮的情况下进行检查(现在只要用户按下“Enter”,它就会检查):

from Tkinter import *
root = Tk()
def check(*event):
    text = inputfield.get()
    print text.startswith('sag')

inputfield = Entry(root)
inputfield.bind('<Return>',check)
inputfield.pack()
root.mainloop()

您还可以执行其他操作来制作小部件validate the entry as you type。 (该链接很旧,但它也指向允许您在不进行子类化的情况下执行此操作的较新功能。)

答案 2 :(得分:0)

您实际上并未将输入字段中的值放入文本变量中。

我将文本中的值重命名为input_text,因为它让我很困惑。我也从使用text[0] + text[1] + text[2]更改为使用startswith()。这将使您无法在短字符串上获取IndexErrors,并且更加pythonic。

from Tkinter import*
root = Tk()

def check():
    input_text = inputfield.get()
    if input_text.startswith('sag'):
        print "True"
    else:
        print "False"

inputfield = Entry(root)
inputfield.pack()



input_text = inputfield.get()
print input_text # Note that this never prints a string, because it only prints once when the input is empty.

but = Button(root, text='Check!', command=check)
but.pack()

root.mainloop()

关键变化是check函数需要实际获取inputfield中的值。

答案 3 :(得分:0)

这是一个使用Entry小部件的版本,该小部件根据用户类型验证其内容(因此用户无需单击按钮甚至按Return键)。

import Tkinter as tk
class MyApp(object):
    '''
    http://effbot.org/zone/tkinter-entry-validate.htm
    http://effbot.org/tkinterbook/entry.htm
    http://www.tcl.tk/man/tcl8.5/TkCmd/entry.htm#M-validate
    '''
    def __init__(self, master):
        vcmd = (master.register(self.validate),
                '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
        self.entry = tk.Entry(master, validate = 'key',
                              validatecommand = vcmd)
        self.entry.pack()
        self.entry.focus()

    def validate(self, action, index, value_if_allowed,
                   prior_value, text, validation_type, trigger_type, widget_name):
        dtype = {'0':'delete', '1':'insert', '-1':'other'}[action]
        n = min(3, len(value_if_allowed))
        valid = False
        if dtype == 'insert':
            if value_if_allowed[:n] == 'sag'[:n]: valid = True
            else: valid = False
        else: valid = True
        print(valid)
        return True

root = tk.Tk()
app = MyApp(root)
root.mainloop()