#python #tkinter
Вопрос:
В Python я использовал Tkinter и сделал текстовый виджет для бота для отображения случайной даты. Но по какой-то причине текстовый виджет отображал случайные { } в тексте. Я не могу понять, что вызывает появление всех {}. вот скриншот
Часть кода, которая это делает, находится здесь:
self.text_widget = Text(self.ui, width=20, height=2, bg="#f1f1f1", fg="#656565",
font=Font1, padx=5, pady=5)
self.text_widget.place(relheight=0.845, relwidth=1, rely=0.08)
self.text_widget.configure(cursor="arrow", state=DISABLED)
# Create Random Date
year = random.randrange(2021, 2121)
monthd = random.randrange(1, 12)
if monthd == 1:
month = "January"
if monthd == 2:
month = "Febuary"
if monthd == 3:
month = "March"
if monthd == 4:
month = "April"
if monthd == 5:
month = "May"
if monthd == 6:
month = "June"
if monthd == 7:
month = "July"
if monthd == 8:
month = "August"
if monthd == 9:
month = "September"
if monthd == 10:
month = "October"
if monthd == 11:
month = "November"
if monthd == 12:
month = "December"
date = random.randrange(1, 29)
answer = ""
answer = "on " , date , ", " , month , year
# Display Date
msg2 = "Bot: " , answer , "nnn"
self.text_widget.configure(state=NORMAL)
self.text_widget.insert(END, msg2)
self.text_widget.configure(state=DISABLED)
print("[OK] Self Message Displayedn")
self.text_widget.see(END)
Кто-нибудь знает, как избавиться от {} ?
Комментарии:
1. Вы пробовали использовать
randint
?2.Похоже, что каждый элемент кортежей оборачивается
{
}
при преобразовании их в строки. Если вам не нужны фигурные скобки, вам нужно будет отформатировать строки самостоятельно.3. @CoderTang, Да, я сделал это, все тот же результат.
4. @Brian я заменил его на: msg2 = «Бот: {d1} {d2}, {d3} nnn».формат(d1 = дата, d2 = месяц, d3 = год), казалось, решил проблему.
5. @Terry-065 Вы также можете использовать литерал f-строки (например
msg2 = f"Bot: {date} {month}, {year} nnn"
, или, что еще лучше, правильное форматирование даты и времени
Ответ №1:
Ваша проблема, похоже, заключается в
msg2 = "Bot: " , answer , "nnn"
потому что это создает кортеж.
Просто измените его на
msg2 = "Bot: " answer "nnn"
Также я замечаю еще одну проблему
monthd = random.randrange(1, 12)
вернутся только с 1 по 11.
answer
имеет ту же проблему, msg2
что и, следовательно, то же решение.
Комментарии:
1. msg2 = «Бот:» ответ «nnn» создает ошибку : ошибка типа: можно только объединить str (не «кортеж») в str
2. Для: месяц = случайный.рандрейндж(1, 12). Спасибо за исправление, я уже исправил это.
3. @Terry-065 изменить
answer
наanswer = "on " str(date) ", " month str(year)
.answer
является кортежем в вашем текущем коде, поэтому он вызовет ту же ошибку4. @bdbd Еще одна ошибка:
TypeError: can only concatenate str (not "int") to str
5. Ок обновил это. Приведите ints к строке или используйте f-строки
answer = f"on {date}, {month} {year}"
Ответ №2:
Вам нужно отформатировать строку самостоятельно. Python добавляет {} при преобразовании его в строку.
Попробуйте заменить answer
на:
answer = f"{date} {month}, {year}"
А затем заменить msg2
на:
msg2 = f"PyPhet: {answer} nnn"