Tkinter в Python - это должно быть медленно или узкое место где-то еще в программе? - PullRequest
4 голосов
/ 05 ноября 2011

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

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

Мы используем метод after для обратного вызова метода, который удаляет все на холсте, а затем перерисовывает все здания и подразделения в правильных положениях каждые 50 миллисекунд.

Должно ли это быть чем-тоэто легко решается Tkinter или проблема в самой нашей программе?

Ответы [ 2 ]

6 голосов
/ 05 ноября 2011

Никто не сможет ответить на этот конкретный вопрос, потому что это зависит от множества факторов. Если у вас есть проблемы с производительностью, вы должны измерить время, которое вы тратите на каждую функцию, чтобы определить узкие места. Это называется профилированием, и у вас есть хороший учебник для Python, встроенного в профилировщик: http://docs.python.org/library/profile.html

Вы ищете два вида информации:

  • функции, в которых вы проводите больше всего времени, включая вызовы другой функции. Очевидно, что первый в списке - ваш главный, так как вся ваша программа работает внутри него. Тем не менее, вы можете заметить функцию, которая потребляет больше, чем вы думаете

  • функции, в которых вы проводите больше всего времени, исключая вызовы других функций. Там у вас будут основные функции. Те, кого часто называют и т. Д. Опять же, если какие-то результаты вас удивят: исследуйте своими глазами.

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

3 голосов
/ 05 ноября 2011

Tk может работать умеренно хорошо, но для написания игры у вас, вероятно, будет гораздо лучшая производительность из коробки, если вы используете библиотеку типа http://pygame.org

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