Как это исправить?
easygui.msgbox
предполагает, что msg
является строкой , как 'Hello'
, но вы передаете ей кортеж , последовательность объектов, таких как
'age', 32, 'salary', 30000
.
Вы можете исправить проблему, передав строку easygui.msgbox
. Ваш вывод представляет собой строку со встроенными значениями переменных, так что это хороший случай для использования строки формата . Строка формата - это строка, содержащая заполнители (обычно пары фигурных скобок {}
), которые можно заменить значениями переменных.
Изменить эту строку:
output = 'Age:', bossInputNew.age, 'years','old \n', 'Pay:', bossInputNew.pay, 'dollars', 'Gender:', bossInputNew.gender
до:
output = 'Age: {} years old \nPay: {} dollars Gender:{}'.format(bossInputNew.age, bossInputNew.pay, bossInputNew.gender)
И это должно работать.
Почему это происходит?
easygui.msgbox
предполагает, что msg
является строкой , но фактически не проверяет, что это так, перед передачей msg
в код, который создает элементы GUI. Так получилось, что поставщиком графического интерфейса по умолчанию является пакет Python tkinter, и в конечном итоге tkinter полагается на код, написанный на другом языке, tcl, для отображения элементов графического интерфейса на экране.
tcl обычно обрабатывает все переменные как строки. Учитывая кортеж как
'Age: ', 32, 'years old \nPay:', 30000
tcl должен уметь распознавать, что три строки, составляющие 'years old \nPay:'
, принадлежат друг другу. Способ сделать это в tcl - заключить (или «заключить в кавычки») строку с фигурными скобками. Вот почему вы видите фигурные скобки в окне сообщения, когда вы передаете ему кортеж output
.