Окно Tkinter: TypeError: может объединять только str (не «int») с str

У меня возникли проблемы с устранением ошибки конкатенации, когда она присутствует в окне Tkinter. Я пытался использовать несколько методов, но они не сработали с тем, что я пытаюсь сделать. Я пытаюсь сделать так, чтобы при нажатии кнопки Tkinter он случайным образом выбирал значение от 0 до 100. Если случайное значение меньше или равно 70, и «Хороший парень», и «Плохой парень». "ухудшится их здоровье. Но если оно больше 70, Хороший парень получит только урон. Затем он печатал их новые хп в окно.

from random import randrange


class App5(tk.Toplevel):
    def __init__(self, title: str):
        super().__init__()
        self.title(title)

        self.style = ttk.Style(self)
        self.style.theme_use("classic")
        self.geometry("490x250")

        self.tres_label = ttk.Label(
            self,
            text = "Oh yeah, also while you were doing that, I enrolled you into a tournament. \nHave fun........what? Why did I sign you up for a tournament you didn't ask for? \nTo increase the total run time on this project.",
        )
        self.tres_label.grid(row=0, column=0, padx=5, pady=5)

        self.rng_button = ttk.Button(self, text = "Click Me", command=self.rng)
        self.rng_button.grid(row=2, column=0, padx=5, pady=5)

    def rng(self):
        class Character:
            def __init__(self, name: str, hp: int, damage: int):
                self.name = name
                self.hp = hp
                self.damage = damage

        Goodguy = Character("Goodguy", 300, 75)
        Badguy = Character("Badguy", 375, 25)
        score = 70
        num = randrange(0, 100)
        G = Goodguy.hp - Badguy.damage
        B = Badguy.hp - Goodguy.damage

        if num >= score:
            Goodguy.hp - Badguy.damage
            Badguy.hp - Goodguy.damage
            self.good = ttk.Label(self, text = "Goodguy Hp:" + G)
            self.good.grid(row=3, column=3)
            self.bad = ttk.Label(self, text = "BadGuy Hp:" + B)
            self.bad.grid(row=3, column=6)
            B = B - Goodguy.damage
            G = G - Badguy.damage
        else:
            Goodguy.hp - Badguy.damage
            self.good = ttk.Label(self, text = "Goodguy Hp:" + G)
            self.good.grid(row=3, column=3)
            self.bad = ttk.Label(self, text = "BadGuy Hp:" + B)
            self.bad.grid(row=3, column=6)
            B = B - Goodguy.damage
            G = G - Badguy.damage
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
76
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

я подозреваю, что проблема здесь:

self.good = ttk.Label(self, text = "Goodguy Hp:" + G)

какой тип Г? если это int, вы не можете сложить их вместе, как вы пытаетесь сделать, вам нужно изменить его на text = "Goodguy Hp: " + str(G) или использовать f-строку, как упоминалось @AKX

попробуйте изменить это выражение во всех четырех местах

может только конкатенировать str (не "int") в str

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

Проблема в том, что вы не можете «суммировать» строку и целое число. Вместо этого используйте форматирование строки:

"Goodguy Hp:" + G

станет

f"Goodguy Hp:{G}"

используя форматирование f-строки.

То же самое относится и к другим ярлыкам хороших и плохих парней.

В python вы не можете объединить целое число и строку. Если вы попытаетесь это сделать, это приведет к следующей ошибке, которую вы получили:

can only concatenate str (not "int") to str

Проблемы будут в следующих блоках кода:

"Goodguy Hp:" + G

и

"BadGuy Hp:" + B

Чтобы решить эту проблему, Вы можете использовать предоставленные решения @AKX и @vencaslac или использовать оператор %d:

"Goodguy Hp: %d" % G
"Badguy Hp: %d" % B

Другие вопросы по теме