@Koatz

Не понимаю, почему не выводит значение описанной функции в надпись?

from tkinter import *
sNumSystem = 0
fNumSystem = 0
def click2(event):
sNumSystem = 2

def click8(event):
sNumSystem = 8

def click10(event):
sNumSystem = 10

def click16(event):
sNumSystem = 16

def click2f(event):
fNumSystem = 2

def click8f(event):
fNumSystem = 8

def click10f(event):
fNumSystem = 10

def click16f(event):
fNumSystem = 16

# Функция перевода из двоичной системы
def ConvertFromBin(_value, _numSystem):
if _numSystem == 2:
return _value
elif _numSystem == 8:
try:
return oct(int(_value, 2))
except ValueError:
print('в двоичной системе есть только 1 и 0')
elif _numSystem == 10:
try:
return int(_value, 2)
except ValueError:
print('в двоичной системе есть только 1 и 0')
elif _numSystem == 16:
try:
return hex(int(_value, 2))
except ValueError:
print('в двоичной системе есть только 1 и 0')

# Функция перевода из восьмеричной системы
def ConvertFromOct(_value, _numSystem):
if _numSystem == 2:
try:
return bin(int(_value, 8))
except ValueError:
print('в восьмеричной системе есть только цифры от 0 до 7')
elif _numSystem == 8:
try:
return _value
except ValueError:
print('в восьмеричной системе есть только цифры от 0 до 7')
elif _numSystem == 10:
try:
return int(_value, 8)
except ValueError:
print('в восьмеричной системе есть только цифры от 0 до 7')
elif _numSystem == 16:
try:
return hex(int(_value, 8))
except ValueError:
print('в восьмеричной системе есть только цифры от 0 до 7')

# Функция перевода из десятичной системы
def ConvertFromDec(_value, _numSystem):
if _numSystem == 2:
try:
return bin(int(_value))
except ValueError:
print('в десятичной системе есть только цифры от 0 до 9')
elif _numSystem == 8:
try:
return oct(int(_value))
except ValueError:
print('в десятичной системе есть только цифры от 0 до 9')
elif _numSystem == 10:
try:
return int(_value)
except ValueError:
print('в десятичной системе есть только цифры от 0 до 9')
elif _numSystem == 16:
try:
return hex(int(_value))
except ValueError:
print('в десятичной системе есть только цифры от 0 до 9')

# Функция перевода из шестнадцатиричной системы
def ConvertFromHex(_value, _numSystem):
if _numSystem == 2:
try:
return bin(int(_value, 16))
except ValueError:
print('в шестнадцатиричной системе есть только цифры от 0 до A')
elif _numSystem == 8:
return oct(int(_value, 16))
elif _numSystem == 10:
return int(_value, 16)
elif _numSystem == 16:
return _value

def clickGO(event):
x = entryvalue.get()
if fNumSystem == 2:
answer = Label(root, text=ConvertFromBin(x, sNumSystem))
answer.grid(row=7, column=3)
elif fNumSystem == 8:
answer = Label(root, text=ConvertFromOct(x, sNumSystem))
answer.grid(row=7, column=3)
elif fNumSystem == 10:
answer = Label(root, text=ConvertFromDec (x, sNumSystem))
answer.grid(row=7, column=3)
elif fNumSystem == 16:
answer = Label(root, text=ConvertFromHex(x, sNumSystem))
answer.grid(row=7, column=3)

root = Tk()
root.title("Калькулятор систем счисления")
root.geometry("800x600")
root.configure(bg="white")

btn2 = Button(root, text="из 2")
btn2.grid(row=0, column=2)
btn2.bind("", click2)

btn8 = Button(root, text="из 8")
btn8.grid(row=0, column=3)
btn8.bind("", click8)

btn10 = Button(root, text="из 10")
btn10.grid(row=0, column=4)
btn10.bind("", click10)

btn16 = Button(root, text="из 16")
btn16.grid(row=0, column=5)
btn16.bind("", click16)

btn2f = Button(root, text="в 2")
btn2f.grid(row=3, column=2)
btn2f.bind("", click2f)

btn8f = Button(root, text="в 8")
btn8f.grid(row=3, column=3)
btn8f.bind("", click8f)

btn10f = Button(root, text="в 10")
btn10f.grid(row=3, column=4)
btn10f.bind("", click10f)

btn16f = Button(root, text="в 16")
btn16f.grid(row=3, column=5)
btn16f.bind("", click16f)

btnGO = Button(root, text="Перевести")
btnGO.grid(row=4, column=5)
btnGO.bind("", clickGO)

entryvalue = Entry(root)
entryvalue.grid(row=0, column=7)

root.mainloop()
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
Во-первых, у тебя проблемка с областью видимости:
добавь строку "global #NumSystem" в каждую def click#(event): - тогда присвоение будет происходить не локальной переменной, а той #NumSystem, в глобльном неймспейс, которая у тебя сейчас всё время остаётся = 0.

Во-вторых, у тебя напутано в def clickGO(event):
запрос идёт по fNumSystem, а текст формируется по ConvertFromBin(x, sNumSystem) - думаю, планировалось в соответствии, а то функция возвращает None.

И третье, чтобы хоть что-то происходило я во всех btn##.bind("", click##) я подобовлял "<Button-1>" вместо пустых кавычек.

Ну а вообще, чрезвычайная избыточность в коде и никакой архитектуры - старайся так не писать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
@Koatz Автор вопроса
def clickGO(event):
x = entryvalue.get()
if fNumSystem == 2:
answer = Label(root, text=ConvertFromBin(x, sNumSystem))
answer.grid(row=7, column=3)

elif fNumSystem == 8:
answer = Label(root, text=ConvertFromOct(x, sNumSystem))
answer.grid(row=7, column=3)
elif fNumSystem == 10:
answer = Label(root, text=ConvertFromDec (x, sNumSystem))
answer.grid(row=7, column=3)
elif fNumSystem == 16:
answer = Label(root, text=ConvertFromHex(x, sNumSystem))
answer.grid(row=7, column=3)

вот в этом фрагменте
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы