Кнопки `tkinter._test ()` невидимы при использовании pipenv - PullRequest
0 голосов
/ 07 ноября 2019

Я сейчас изучаю Tkinter и пытаюсь разобраться с моей первой проблемой, но найти Google не помогло.

Я запускаю этот код в Mac OS X 10.15.1 (Catalina)

Я использую Python 3.7, и мой код выглядит так (много шаблонов в соответствии со стандартами PEP8):

"""
Experiments in tkinter
"""


import tkinter as tk


def main():
    """
    Main entrypoint
    """

    tk._test()


if __name__ == "__main__":
    main()

Это выводит на консоль следующее предупреждение:

ПРЕДУПРЕЖДЕНИЕ О УСТАРЕВАНИИ: Системная версия Tk устарела и может быть удалена в будущем выпуске. Пожалуйста, не полагайтесь на это. Установите TK_SILENCE_DEPRECATION = 1 для подавления этого предупреждения.

Также отображается окно с полностью пустыми кнопками:

imagetkinter._test()">

СНасколько я понимаю, на этих кнопках должно быть написано «Click Me» и «Quit».

Также, когда я нажимаю верхнюю кнопку, она мигает черным в течение секунды, например так:

Result of clicking on first button

После чего кнопка шире, чем раньше:

Clicking twice Clicking ten times

Я предполагаюошибка версии Tk может быть связана с выходным поведением. Однако я не могу найти способ обновить Tk. Что мне здесь делать?

Обновление

Увидев ответ @ ShayneLoyd (предполагая, что мне нужна обновленная версия Python с обновленной версией Tk), я начал осматриваться еще немного и нашел этот пост на досках обсуждений Apple , в котором говорится, что вы можете использовать homebrew для установки версии Python, которая ссылается на собственную установленную версию Tk для homebrew. Я попробовал это, и это не удалось, поэтому я решил проблему с Google и обнаружил этот пост StackOverflow , который, казалось, предлагал мне установить ActiveTcl , и он будет работать.

Я установил ActiveTcl из ActiveState и вернулся к своему проекту. Сначала я запустил его так:

$> cd ~/Source/experiments/python/tkinter
$> ./test.py

Это на самом деле сработало ! Я мог читать кнопки, и он вел себя так, как должен. Затем я понял, что не использую pipenv, поэтому я провел быструю проверку:

$> pipenv run ./test.py

Теперь я вернулся к состоянию сбоя. Я обновил свой скрипт для отображения версии Tcl и Tk и, конечно же, когда я использовал pipenv, он загружал Tcl / Tk 8.5.9, но когда я не использовал pipenv, он загружал 8.6.9

Так как жеЯ сейчас исправлю pipenv?

1 Ответ

0 голосов
/ 08 ноября 2019

После нескольких часов работы с ним, я понял это!

Pipfile содержал ссылку на версию Python 3.7

Поэтому pipenv install искал на моей машине любую версию 3.7Python установлен. Версия, которую он нашел, была Homebrew, со статически связанной Tk 8.5.9.

Обновив Pipfile, чтобы потребовать Python 3.8, моя машина начала тянуть мою систему Python, которая использует динамически связанную Tk, которую я имелуспешно обновлен до 8.6.9

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