Tkinter Вставить вывод как [список] после "" .join () - PullRequest
0 голосов
/ 30 апреля 2019

Я делаю программу на python, которая преобразует числа в двоичные с графическим интерфейсом tkinter.При использовании e.insert для записи она возвращает нормальную строку: 0101010011 как [0, 1, 0, 1 ...]

Функция, которая преобразует число в двоичное.Я знаю, что существует альтернатива bin (), я просто хотел создать свою собственную.

def dec2bin(decnum):
  binarylist = []
  while (decnum > 0):
    binarylist.append(decnum % 2)
    decnum = decnum // 2
  binarylist.reverse()
  binarylist = str(binarylist)
  return "".join(binarylist)

Функция, которая вызывается при нажатии кнопки в графическом интерфейсе tkinter и предназначена для замены одной из записей.текст поля с двоичным выводом.

def convert():
  decimal = entrydec.get()
  decimal = int(decimal)
  entrybin.delete(0, END)
  entrybin.insert(0, dec2bin(decimal))

Я ожидаю вывод 010101, но фактический вывод равен [0, 1, 0, 1, 0, 1]

1 Ответ

2 голосов
/ 30 апреля 2019

Вы не можете использовать str() в списке - str([0, 1, 0, 0]), чтобы получить список со строками - ["0", "1", "0", "0"]

Вы можете использовать понимание списка:

    binarylist = [str(x) for x in binarylist]

или map():

    binarylist = map(str, binarylist)

Или вы должны преобразовать числа 0, 1 в строку при добавлении в список:

    binarylist.append(  str(decnum % 2)  )

И позже вы можете использовать join()

def dec2bin(decnum):
    binarylist = []

     while (decnum > 0):
        binarylist.append( str(decnum % 2) ) # <-- use str()
        decnum = decnum // 2

    binarylist.reverse()
    #binarylist = str(binarylist) # <-- remove it

    return "".join(binarylist)

dec2bin(12)

Результат:

"1100"
...