2015-08-06 3 views
1

Я не могу вставить новую строку на выходе, которая сгенерирована с использованием Label в Tkinter. Ниже приведен образ моего графического интерфейса, который объясняет мою проблему.Python - вставка новой строки в метку Tkinter

enter image description here

Это код, который я использовал для определения моей метки.

string1 = 'At pathID' + str(l.get('pathId'))+ 
      'In label' + str(keys) +':'+ 
      'profile in reference but not in copy' + 
      str(list(set(a_value)-set(b_value)))    

ttk.Label(t.sub_frame, text=string1).pack(side="left", fill="x", expand=1) 

Что я хочу:

Я хочу новую строку в начале At path ID0 in label.....

Так что выход в этикетке должен выглядеть, как показано ниже, и не так, как показано в одной строке выше в GUI изображение:

At path ID0 In label1: profile in reference but not in copy[(18,0,0)] At path ID0 In label2: profile in reference but not in copy[(18,0,8)]

Что Я пробовал:

Вышеуказанные строки генерируются в цикле, поэтому я попытался сохранить новый символ линии перед началом строки, но он отображает только вывод из следующей строки, но при этом он привязан к одной строке.

string1 = '\n' + '\nAt pathID' + str(l.get('pathId'))+ 
       'In label' + str(keys) +':'+ 
       'profile in reference but not in copy' + 
       str(list(set(a_value)-set(b_value))) 

Причины я предположил, что в каждой петле новой строки будет встречаться и я могу получить каждую строку напечатанной в новой строке. Вы, ребята, можете мне что-то сказать? Я думаю, что мне не хватает младшей логики где-то

+2

Почему вы используете '/ n'? Новая строка - '\ n'. Попробуйте это в интерпретаторе: 'print ('hello \ nworld')' –

+0

извините за неправильный символ. В коде я использую правильный. по ошибке я использовал '/ n' здесь. Позвольте мне изменить вопрос. – Dhruvify

ответ

1

Я не понимаю, почему, но из-за чего значения в pack вызывают некоторые проблемы. Я отредактировал свой код, как показано ниже. Теперь он работает отлично.

ttk.Label(t.sub_frame, text=string1).pack()

Спасибо ребята за ваше внимание.

+2

Рекомендуется использовать 'pack()' в отдельной строке для ссылки на объект: 'label = ttk.Label (t.sub_frame, text = string1); label.pack() '. Могут ли ваши параметры в' pack() 'работать таким образом. Если вы знаете ширину, вы также можете установить 'wraplength' вашей метки:' ttk.Label (parent, text = "longtext ..." wraplength = 20) ', это автоматически нарушит ваш текст после того, как заданная ширина будет достиг. Также вы должны использовать 'format()' для формирования ваших строк, см. [Clickme] (http://stackoverflow.com/questions/5082452/python-string-formatting-vs-format) – VRage

+0

Это то, что ваша строка будет выглядеть так: 'string1 = 'At pathID {0} В метке {1}: профиль в ссылке, но не в формате copy {2}'. format (l.get ('pathId'), keys, list (set (a_value) -set (b_value))) ' – VRage

+1

Это очень полезно. Спасибо, VRage. – Dhruvify

Смежные вопросы