Я пишу простую программу для переключения числа между базовыми 10, 2, 8 и 16. Однако у меня возникают проблемы с несколькими преобразованиями или преобразования обратно в денар. Вот код, я используюPython3 - Проблемы с преобразованием между различными системами счисления
#! python3
import tkinter as tk
from tkinter import ttk
CurrentSystem = 'd'
def clearEnt():
ent.delete(0, last = None)
def baseConverter(value,base):
try:
if base == 2:
clearEnt()
ent.insert(0, bin(value))
CurrentSystem = 'b'
if base == 8:
clearEnt()
ent.insert(0, oct(value))
CurrentSystem == 'o'
if base == 16:
clearEnt()
ent.insert(0, hex(value))
CurrentSystem == 'h'
if base == 10:
if CurrentSystem == 'b':
clearEnt()
ent.insert(0, int(value, 2))
if CurrentSystem == 'o':
clearEnt()
ent.insert(0, int(value, 8))
if CurrentSystem == 'h':
clearEnt()
ent.insert(0, int(value, 16))
except ValueError:
clearEnt()
ent.insert(0, 'ERROR')
root = tk.Tk()
root.title('Number Converter')
ent = ttk.Entry()
ent.grid (row = 0, column = 1, columnspan = 2, padx = 5)
button1 = ttk.Button(root, text = "Den")
button2 = ttk.Button(root, text = "Bin", command = lambda:baseConverter(int(ent.get()), 2))
button3 = ttk.Button(root, text = "Oct", command = lambda:baseConverter(ent.get(), 8))
button4 = ttk.Button(root, text = "Hex", command = lambda:baseConverter(ent.get(), 16))
button1.grid(row = 1, column = 0)
button2.grid(row = 1, column = 1)
button3.grid(row = 1, column = 2)
button4.grid(row = 1, column = 3)
root.mainloop()
Как вы можете видеть, идея заключается в том, что число в поле ввода изменений лор ТЗ на основе нажатия кнопки. Пока он изменится от логана к другой системе, а затем откажется снова или снова работать. Буду признателен за любую помощь или совет по этому поводу. Спасибо
Сделайте свой код модульным. Забудьте о tkinter полностью на некоторое время и просто сосредоточьтесь на правильном использовании функции или функций преобразования. Затем - назовите их соответствующим образом в обработчиках событий. Какие проблемы у вас есть с конверсией? –
При запуске его с python3.4 постоянно появляются сообщения об ошибках типа: ent.insert (0, oct (value)) ТипError: объект 'str' не может быть интерпретирован как целое. Скорее всего, проблема в том, что значения представлены в виде строк, а ваши команды oct/hex терпят неудачу. –
Чтобы развернуть мой последний комментарий, хорошей стратегией было бы написать функцию Python 'changeBase (s, a, b)', которая будет принимать * string * 's', int' a', который представляет текущую базу 's' и int' b', который представляет целевую базу, и которая возвращает строку, представляющую число в целевой базе. Получите это, чтобы он работал безупречно в оболочке (возможно, написал тестовый скрипт для него, который проверяет все допустимые случаи 4x4 = 16), а затем беспокоиться о том, как подключить его к tkinter –