Tkinter - Почему мой фон / рамка не перекрашиваются? - PullRequest
1 голос
/ 12 октября 2011

Я не уверен, что нахожусь на правильном пути - но я начал программировать с помощью Python.

У меня все мои кнопки и записи проработаны. Основная проблема, с которой я столкнулся, связана с методом, который бросает мой кубик и помещает результат.

def roll(self):
    self.die = Die(int(self.sides.get())) # gets from label
    t = self.die.roll()
    t += int(self.mod.get()) # gets from label
    self.result = Label(self.root, text=t).grid(row=2, column=1, sticky=W)

Моя проблема в том, что я восстанавливаю ярлык поверх старого? Разве старый текст метки не должен быть уничтожен, а рамка должна показывать только новую метку на своем месте?

1 Ответ

1 голос
/ 12 октября 2011

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

  • каждый раз, когда вам нужен новый бросок, вы создаете новый Die. Почему бы не сохранить тот же экземпляр?
  • каждый раз, когда вы хотите отобразить список, вы создаете новый Label. Возможно, вы не знаете об этом, но вы можете обновить текст метки (и любой виджет Tkinter), используя метод configure(). Это будет означать, что вам нужно grid экземпляр только в первый раз.

Кстати, .grid возвращает None. Если вы хотите сохранить ссылку на метку результата, вы должны использовать две строки для экземпляра Label:

self.result = Label(self.root, text=t)  # first creating instance...
self.result.grid(row=2, colum=1, sticky=W)  # ... and placing it in self.root

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...