tkinter:为一个按钮分配多个功能

2024-09-19 23:41:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Tkinter构造一个罗马数字转换器。我需要使用一个按钮,它将把小数转换成罗马数字,如果输入数字,罗马数字转换为小数。如何将这两个函数分配给一个按钮,并调用与输入内容对应的函数?在

到目前为止,我得到的是:

    from tkinter import *
    root = Tk()
    root.title('Roman numerals')
    root.geometry('400x300')

    numRomanMap = (('M',  1000), ('CM', 900), ('D',  500), ('CD', 400), ('C',  100), ('XC', 90), ('L',  50), ('XL', 40), ('X',  10), ('IX', 9), ('V',  5), ('IV', 4), ('I',  1))

    def roman_number():
        roman_string = ''
        n = float(eval(ent.get()))
        wrongValue = ('Number is out of range')
        if not 1 <= n <= 9999:
                    return wrongValue
        for numeral, integer in numRomanMap:
            while n >= integer:
                roman_string += numeral
                n -= integer
        print (roman_string)

    def decimal_number(s):
        dec_number = 0
        s = str(eval(ent.get()))
        index = []
        for i in range(len(s)):
            for numeral, integer in numRomanMap:
                if s[i] == numeral:
                    index.append(integer)
        index.append(0)
        for i in range(len(s)):
            if index[i] >= index[i+1]:
                dec_number = dec_number + index[i]
            else:
                dec_number = dec_number - index[i]
        print (dec_number)

    Convertb = Button(root, text='Convert', command = roman_number)
    ent = Entry(root)
    ent.pack()
    ent.delete(0, END)
    ent.insert(0, 'Enter a number')
    Convertb.pack()

    root.mainloop()

Tags: innumberforstringindexifrangeinteger
1条回答
网友
1楼 · 发布于 2024-09-19 23:41:09

添加一个函数来查看输入是否为数字。在

def check_input():
    s = ent.get()
    if (isinstance(s, int)):
        roman_number(s)
    else:
        decimal_number(s)

然后从按钮调用该函数:

^{pr2}$

相关问题 更多 >