我在使用此代码时遇到了很多困难,而且我无法找到任何解决方案,我将在下面发布我的代码。
from tkinter import *
a = []
class test(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.parent.title('testing')
self.pack(fill=BOTH, expand=1)
self.d = DoubleVar()
self.d.set('None')
def grab():
b = ent.get()
a.append(b)
c = [s.strip('qwertyuiopasdfghjklzxcvbnm') for s in a]
self.d.set(c[-1])
if c[-1] == '':
self.d.set('None')
ent = Entry(self)
ent.grid(row=0, column=0)
but = Button(self, text='Get', command=grab)
but.grid(row=1, column=0)
Label(self, textvariable=self.d).grid(row=2, column=0)
root = Tk()
app = test(root)
root.mainloop
我想我的目标是能够忽略或删除放在输入框内的字母,正如您所看到的,我已经使用了条带方法,但它不起作用我希望它的方式。如果有人可以提供一些建议或代码,或者将我与我忽略的问题联系起来,那就太棒了,我会很高兴。
编辑:它已经清除了之前和之后的字母,但之间没有任何内容
答案 0 :(得分:0)
一点点lambda应该做的伎俩
a = "123a3456b"
filter(lambda '0' <= x <= '9', a)
print a
"1233456"
答案 1 :(得分:0)
干净的方法就是:
filter(lambda s: not str.isalpha(s), data)
答案 2 :(得分:0)
验证器将是解决此问题的正确模式。 Interactively validating Entry widget content in tkinter在tkinter中有一个你应该可以使用的实现。
答案 3 :(得分:0)
您在数字中收到了字母,因为您首先将字符串放入列表中。
strip()
删除了前导和尾随字符,因此如果您有一个字符串:aaa000bbb111ccc
,从中删除字母只会删除最外面的字母。但是,如果拆分字符串,然后从剥离字符串的每个元素中删除字母,则可以有效地删除所有字母。然后,您可以join()
列表的其余部分一起返回到您的字符串。考虑这个例子:
>>> import string # string.ascii_letters returns a string of all letters (upper and lower), just easier than typing them
>>> def check(x):
return ''.join([char.strip(string.ascii_letters) for char in x])
>>> var = 'aaa000bbb111ccc'
>>> var_as_list = [var]
>>> check(var)
'000111'
>>> check(var_as_list)
'000bbb111'
所以,c
应该是:
c = ''.join([s.strip('qwertyuiopasdfghjklzxcvbnm') for s in b.get()])
如果您希望该字段仅包含float
,则还应考虑进一步验证。这是跟踪StringVar()
实例的任何更改并将其更改仅限于数字和期间的一种方法:
from tkinter import *
import string
def check(*args):
# make a 'whitelist' of allowable characters
whitelist = string.digits + '.'
# set var to its current value - any characters not in whitelist
var.set(''.join([i for i in var.get() if i in whitelist]))
root = Tk()
var = StringVar()
var.set('0.0')
Entry(root, textvariable=var).grid(row=0, column=0)
Label(root, textvariable=var).grid(row=1, column=0)
var.trace('w', check) # if var changes, call check()
mainloop()