Ткінтер: "Можливо, Python не налаштовано для Tk"


76

Сьогодні я хотів почати працювати з Tkinter, але у мене є деякі проблеми.

Python 3.2 (r32:88445, Mar 28 2011, 04:14:07) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from tkinter import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.2/tkinter/__init__.py", line 39, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
ImportError: No module named _tkinter

То як я можу налаштувати свій Python 3.2 для роботи з Tkinter?


1
Хоча це прямо не відповідає на ваше запитання, якщо ви хочете використовувати найновіший Python в Linux, використання попередньо скомпільованих двійкових файлів (таких як ActivePython - до складу якого входить Tkinter) заощадить багато часу.
Шрідхар Ратнакумар

2
Кожен дистрибутив Linux завжди має офіційний пакет python. Якщо вам не потрібно щось конкретне, використання сторонніх двійкових файлів насправді не рекомендується. Тим не менш, ви, мабуть, одна або дві команди від підтримки Tk в python, але мені потрібно знати, який смак Linux ви використовуєте.
Mad Wombat

Відповіді:


32

Відповідно до http://wiki.python.org/moin/TkInter :

Якщо це не вдається з "Немає модуля з іменем _tkinter", вашу конфігурацію Python потрібно змінити, щоб включити цей модуль (який є модулем розширення, реалізованим на C). Є НЕ редагувати модулі / Setup (це застаріло). Можливо, вам доведеться встановити Tcl і Tk (при використанні RPM встановіть також RPM -devel) та / або відредагуйте скрипт setup.py, щоб вказати потрібні місця, де встановлено Tcl / Tk. Якщо ви встановлюєте Tcl / Tk у місцях за замовчуванням, просто повторне запуску "make" має створити розширення _tkinter.


1
Як редагувати сценарій setup.py? Як ви робите повтор? Я намагаюся зробити це на mac, і я виявляю, що мені слід просто повернути mac і отримати машину Windows.
Drew Rush

3
У моєму випадку це було викликано оновленням tk. Він використовується тільки matplotlib, і це може бути плавав: stackoverflow.com/a/4935945/1959808
Іоанніс Filippidis

setup.py знаходиться у каталозі вихідного коду python
dasons

2
У мене на комп’ютері приблизно 50 файлів setup.py, який із них є правильним?
logic1976

90

У розділі Arch / Manjaro просто встановіть пакет tk:

sudo pacman -S tk

9
Ідеально! Я отримую помилку на Manjaro і що це фіксується в: ImportError: libtk8.6.so: cannot open shared object file: No such file or directory.
DearVolt

як щодо Windows?
lone_coder

46

Встановіть tk-devel(або пакет з аналогічною назвою) перед побудовою Python.


23
На Ubuntu запустіть 'sudo apt-get install tk-dev', а потім повторно запустіть make
pycoder112358

1
@ pycoder112358: Я зробив це, але це все ще говорить мені, ImportError: No module named _tkinterколи я намагаюся імпортувати tkinter. Я використовую python3.4.0, скомпільований з джерела на ubuntu 13.10.
ARF

7
Що tk-devel? Ви повинні дати хоча б мінімальне пояснення, чому це має бути корисним у цьому випадку.
nbro

7
Як коментар іншим, тут важливо "перед побудовою Python". Коли ви встановлюєте модуль, вам потрібно відновити python, перш ніж він знайде модуль.
mjp

21

Щоб з цим працювати pyenvна Ubuntu 16.04 та 18.04, мені довелося:

$ sudo apt-get install python-tk python3-tk tk-dev

Потім встановіть потрібну мені версію Python:

$ pyenv install 3.6.2

Тоді я міг би добре імпортувати tkinter:

import tkinter

4

Мав таку ж проблему на Fedora з Python 2.7. Виявляється, потрібні додаткові пакети:

sudo dnf install tk-devel tkinter

Після встановлення пакунків, цей приклад привітного світу, здається, чудово працює на Python 2.7:

$ cat hello.py
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
$ python --version
Python 2.7.8
$ python hello.py

А через пересилання X11 це виглядає так:

Привіт Світ через X11

Зверніть увагу, що в Python 3 ім’я модуля мало, і, ймовірно, потрібні інші пакети ...

from tkinter import *

sudo: dnf: команду не знайдено (я ubuntu, це різниця?)
mjp

2

О, я щойно дотримався рішення, яке Ігнасіо Васкес-Абрамс запропонував встановити tk-dev перед створенням python. (Створення Python-3.6.1 з вихідного коду на Ubuntu 16.04.)

Були попередньо скомпільовані об’єкти та двійкові файли, які я побудував учора, хоча я не очищав об’єкти і просто будував знову за тим самим шляхом побудови. І це працює чудово.

sudo apt install tk-dev
(On the python build path)
(No need to conduct 'make clean')
./configure
make
sudo make install

Це воно!


2

Я зіткнувся з цією проблемою на python 2.7.9.
Щоб виправити це, я встановив tk і tcl, а потім відновив код python і перевстановив, і під час налаштування я явно встановив шлях для tk і tcl, виконавши:

./configure --with-tcltk-includes="-I/usr/include" --with-tcltk-libs="-L/usr/lib64 -ltcl8.5 -L/usr/lib64 -ltk8.5"

Крім того, ціла стаття про процес встановлення python: Створення Python з джерела


1

Я думаю, що найбільш повною відповіддю на це є прийнята відповідь, знайдена тут:

Як змусити tkinter працювати з установкою Python 2.7 за замовчуванням в Ubuntu?

Я зрозумів це після занадто багато часу, витраченого на цю проблему, тому, сподіваюся, я зможу врятувати когось іншого клопоту.

Я знайшов цей старий звіт про помилку, визнаний недійсним, де згадується саме моя проблема, у мене був Tkinter.py, але він не зміг знайти модуль _tkinter: http://bugs.python.org/issue8555

Я встановив пакет tk-dev за допомогою apt-get та відновив Python, використовуючи ./configure, make та make install у каталозі Python2.7.3. І тепер мій Python2.7 може імпортувати Tkinter, так!

Мене трохи бентежить, що пакет tk-dev взагалі не згадується в документації щодо встановлення Python .... нижче - ще один корисний ресурс про відсутні модулі в Python, якщо, як і я, хтось повинен виявити, що їх бракує більше, ніж _tkinter.



1

Усім, хто використовує Windows та підсистему Windows для Linux, переконайтеся, що під час запуску команди python з командного рядка не випадково запускається установка python з WSL! Зараз у мене дуже боліла голова. Швидка перевірка, яку ви можете зробити для цього, це просто
which <python command you're using>
якщо це виводить щось на зразок, /usr/bin/python2навіть якщо ви перебуваєте в PowerShell, це, мабуть, і відбувається.


1

Отож, здається, у багатьох була ця проблема (у тому числі і у мене), і я виявив, що помилкою є те, що Tkinter не був встановлений у моїй системі під час компіляції python.

У цій публікації описано, як вирішити проблему:

  1. Видалення віртуального середовища / розподілу python
  2. встановити Tkinter за допомогою sudo apt-get install tk-dev(для deb) абоsudo pacman -S tk (для arch / manjaro)
  3. Потім перейдіть до компіляції python ще раз.

Це творило для мене чудеса.


Це правильне рішення, дякую! Я досі не знаю, чому найбільш прихильні відповіді змушують вас пройти безліч обручів, не пояснюючи, як це зробити, і простий командний рядок закопаний внизу ...
tralph3

Дякую за добрі слова. Сподіваюся, що хтось може вважати це більш корисним, ніж усі здогадки, які були зроблені, це ця тема: /
Якоб Гульдберг Ааес

0

Цей симптом може також виникнути, коли пізнішу версію python (2.7.13, наприклад) було встановлено в / usr / local / bin "поряд з" версією версії python, а потім наступне оновлення операційної системи (скажімо, Ubuntu 12.04 -> Ubuntu 14.04) не вдається видалити там оновлений python.

Щоб виправити цю несумісність, потрібно

а) видалити оновлену версію python у / usr / local / bin;

б) видалити python-idle2.7; і

в) перевстановити python-idle2.7.


0

Якщо ви працюєте на екземплярі AWS, який працює під управлінням ОС Linux Linux, чарівною командою виправити це було для мене

sudo yum install tkinter

Якщо ви хочете визначити свою збірку Linux, спробуйте cat /etc/*release


як щодо Windows?
lone_coder

0

Навіть після встановлення python-tk, python3-tk, я отримував помилку, ваш python не налаштований на Tk.

Тож я додатково встановив tk8.6-dev. Потім я знову будую свій Python, знову запускаю наступне: make, make install.

Коли я це зробив, я побачив на екрані повідомлення про те, що він створює _tkinter та відповідні модулі. Як тільки це було зроблено, я спробував 'import tkinter', і це спрацювало.


-3

Вам потрібно встановити tkinter для python3.

На Fedora pip3 install tkinter --userповертається Could not find a version that satisfies the requirement... так що я повинен команду : dnf install python3-tkinter. Це вирішило мою проблему

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.