我的程序应检查输入字的前三个字母是否与预定义字相似 我已经用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技能不好);-)
谢谢!
答案 0 :(得分:3)
按下按钮后,您的check
功能必须检索文本字段:
def check():
text = inputfield.get()
print text.startswith('sag')
我使用.startswith()
稍微更改了测试,并直接打印了该测试的结果(print会将boolean True
或False
转换为匹配的字符串。)< / 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()