2017-10-20 47 views
0

我想構建一個使用Tkinter的羅馬數字轉換器。如果輸入數字,我需要使用一個按鈕將小數轉換爲羅馬數字,如果輸入數字,則將羅馬數字轉換爲小數。如何將兩個功能分配到一個按鈕,並調用與輸入內容相對應的功能?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() 
+3

可以使簡單地檢查用戶的輸入的功能,然後將該分支成另外兩個函數,一個用於十進制輸入和其他RN輸入 – Goralight

回答

1

添加的功能,看是否輸入是一個數字。

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

並調用從按鈕功能:

Convertb = Button(root, text='Convert', command = check_input) 
+0

tkinters'entry.get()'返回int如果它的get只是int?或者總是這樣做,不管輸入是什麼,抓住輸入作爲一個str? – Goralight

+2

@Goralight'entry.get()'總是返回一個字符串,所以你可以使用's.isdigit()'來檢查輸入。 –

+0

@Avión感謝您的回答。我收到以下錯誤消息: 管線40,在check_input 十進制數(n)的 線29,在十進位數字 如果指數[I]> =指數[I + 1]: IndexError:列表索引超出範圍 – Greta

相關問題