Почему easygui вставляет фигурные скобки при передаче кортежа со строками со встроенными пробелами? - PullRequest
0 голосов
/ 05 мая 2018

Easygui вставляет фигурные скобки, когда мы пытаемся разбить текст, есть ли способ разбить текст, не давая фигурные скобки.

import easygui

#Class for seperating workers.
class HumanClassification:
    #Sets the default worker info to null:
    def __init__(self):
        self.age = 0
        self.pay = 0
        self.gender = ''

    #Outputs the workers info:
    def classification(self, age, pay, gender):
        self.age = age
        self.pay = pay
        self.gender = gender



#Current Workers:
myListWorkers = ['Bob', 'Diann', 'Tec']
Bob = HumanClassification()
Diann = HumanClassification()
Tec = HumanClassification()



#Instantize Classes:
Bob.classification(42, 15000, 'male')
Diann.classification(25, 1000, 'female')
Tec.classification(18, 200000, 'male')

#Asks user if he/she wants to find info about worker:
bossInput = easygui.buttonbox("Who do you want to view info on? ", choices=myListWorkers)
bossInputNew = eval(bossInput)

output = 'Age:', bossInputNew.age, 'years','old \n',  'Pay:', bossInputNew.pay, 'dollars', 'Gender:', bossInputNew.gender
#Prints out the output from code:
easygui.msgbox(msg=(output))

1 Ответ

0 голосов
/ 08 мая 2018

Как это исправить?

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.

...