如何擦除数字之间的字母(Python)

时间:2014-05-19 16:39:09

标签: python tkinter

我在使用此代码时遇到了很多困难,而且我无法找到任何解决方案,我将在下面发布我的代码。

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

我想我的目标是能够忽略或删除放在输入框内的字母,正如您所看到的,我已经使用了条带方法,但它不起作用我希望它的方式。如果有人可以提供一些建议或代码,或者将我与我忽略的问题联系起来,那就太棒了,我会很高兴。

编辑:它已经清除了之前和之后的字母,但之间没有任何内容

4 个答案:

答案 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()