_tkinter.TclError: couldn’t connect to display „:0“

Du hast dich wahrscheinlich in einem Konsolenfenster zu root gemacht und dann versucht, das Programm zu starten. Das Programm (jedes grafische Programm) meldet dann, dass es keine Verbindung zum X-Server erhält. Das liegt daran, dass standardmäßig der X-Server Verbindungen von „außerhalb“ (in dem Fall von einem anderen User) verweigert. Das Problem lässt sich mit „xhost local:root“ beheben. Temporär für diese Sitzung nimmt der X-Server lokale Verbindungen vom User root an. Allerdings ist davon abzuraten, außer zu Administrationzwecken, mit dem User root zu arbeiten. Für die tägliche Standardarbeit am PC reichen die Rechte eines normalen Users in der Regel völlig aus.

TypeError: ‚module‘ object is not callable

Dies ist, was die Fehlermeldung bedeutet: Es heißt, dass das Modulobjekt nicht aufrufbar ist, da Ihr Code ein Modulobjekt aufruft. Ein Modulobjekt ist die Art von Dingen, die Sie beim Importieren eines Moduls erhalten. Sie haben versucht, ein Klassenobjekt innerhalb des Modulobjekts aufzurufen, das zufällig denselben Namen hat wie das Modul, in dem es enthalten ist. Hier ist eine Möglichkeit, diese Art von Fehler logisch aufzuschlüsseln: „Das Modulobjekt kann nicht aufgerufen werden. Python teilt mir mit, dass mein Code versucht, etwas aufzurufen, das nicht aufgerufen werden kann.

Das ist der Code der zu dieser Fehlermeldung gehört:

from tkinter import *
import tkinter as tk
mainwindow=tk()
mainwindow.loop()

Der Fehler wird durch die Angabe von mainwindow=tk() verursacht. Korrekt ist es so:

import tkinter as tk
from tkinter import *
window=tk.Tk()
window=mainloop()

Bitte die Großschreibung des T bei tk.Tk() beachten.

NameError: name ‚os‘ is not defined

Bitte prüfen ob das Modul os importiert ist.

Im Modul os findet man Dutzende von Funktionen, um mit dem Betriebssystem zu interagieren:

>>> import os
>>> os.getcwd()                         # das aktuelle Arbeitsverzeichnis
'C:\\Python33'
>>> os.chdir('/server/accesslogs')      # Arbeitsverzeichnis verändern
>>> os.system('mkdir today') # Kommando in der Systemshell ausführen
>>> 0

Dabei sollte unbedingt beachtet werden, import os statt from os import * zu verwenden, da ansonsten os.open() die eingebaute Funktion open() überschreibt, die sich vollkommen anders verhält.

TypeError: unsupported operand type(s) for /: ‚DoubleVar‘ and ‚float‘

michi@debian:~/python$ python leu-1.py 
Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "leu-1.py", line 4, in berechnung
    euro=leuro/5.0
TypeError: unsupported operand type(s) for /: 'DoubleVar' and 'float'
^CTraceback (most recent call last):
  File "leu-1.py", line 19, in <module>
    root.mainloop()
  File "/usr/lib/python3.7/tkinter/__init__.py", line 1283, in mainloop
    self.tk.mainloop(n)
KeyboardInterrupt
from tkinter import *
from tkinter import ttk
import tkinter as tk
def berechnung():
        euro=leuro/5



root=Tk()
root.title("Leu in Euro")
mainframe=ttk.Frame(root,padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
leuro=DoubleVar()
leuro.set(1.0)
print(leuro.get())
leuro_entry=ttk.Entry(mainframe, width=7,textvariable=leuro)
leuro_entry.grid(column=2, row=1,sticky=(W, E))
ttk.Label(mainframe,textvariable=leuro).grid(column=2, row=2, sticky=(W,E))
ttk.Button(mainframe,text="Berechnen", command=berechnung).grid(column=3, row=3,sti$
root.mainloop()

Dieser Fehler tritt auf da die Variable leuro und euro unterschiedliche Datentypen haben. Durch die Änderung von leuro=float() wurde das Prob gelöst.

ImportError: cannot import name ‚ImageTk‘ from ‚PIL‘ (/usr/lib/python3/dist-packages/PIL/__init__.py)

ImportError: cannot import name 'ImageTk' from 'PIL' (/usr/lib/python3/dist-packages/PIL/__init__.py)

Bitte als Erstes überprüfen ob ImageTk korrekt geschrieben ist. Das T wird groß geschrieben das k aber klein.

>>> from PIL import Image
>>> from PIL import ImageTk
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'ImageTk' from 'PIL' (/usr/lib/python3/dist-packages/PIL/__init__.py)

Dann überprüfen ob die folgenden Pakete installiert sind:

root# apt-get install python3-pil python3-pil.imagetk

_tkinter.TclError: couldn’t recognize data in image file „hund.jpg“

Zum Anzeigen von Bildern im jpg-Format wird zusätzlich das PIL-Modul (Python Image Library) benötigt. Mit dem Tkinter eigenen tk.PhotoImage lassen sich nur die Bildformate gif und png anzeigen. Mit PIL lassen sich alle Bildformate anzeigen.

Hier die Tkinter-Variante:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from functools import partial
import tkinter as tk

def bomben(button, button_image, event):
    button.configure(image=button_image)
    
app_win = tk.Tk()

tk_button_image = tk.PhotoImage(file="hund.png")
#tk_button_image = tk.PhotoImage(file="hund.gif")

button = tk.Button(app_win, text="j")
button.pack(padx=10, pady=10)
button.bind('<Button-1>', partial(bomben, button, tk_button_image))

app_win.mainloop()

Hier die PIL-Variante:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from functools import partial
from PIL import Image, ImageTk

import tkinter as tk

def bomben(button, button_image, event):
    button.configure(image=button_image)
    
app_win = tk.Tk()

pil_button_image = Image.open("hund.jpg")
#pil_button_image = Image.open("hund.gif")
#pil_button_image = Image.open("hund.png")


tk_button_image = ImageTk.PhotoImage(pil_button_image)

button = tk.Button(app_win, text="j")
button.pack(padx=10, pady=10)
button.bind('<Button-1>', partial(bomben, button, tk_button_image))

app_win.mainloop()

no module namend tkinter

NameError: name ‚tkinter‘ is not defined

Bitte überprüfen ob tkinter installiert ist :
#apt-get install tkinter


Die Version kann man über den Befehl

tkinter.Tcl().eval('info patchlevel')

überprüft werden.

Wenn die Version aktualisiert werden soll folgende Schritte ausführen:

  1. Überprüfen Sie die Python-Version auf dem Terminal – python --version


  2. Holen Sie sich Root-Benutzerrechte. On terminal type –sudo su
  3. Notieren Sie sich das Passwort des Root-Benutzers
  4. Führen Sie diesen Befehl aus, um zu Python 3.6 zu wechseln –
    update-alternatives --install /usr/bin/python python /usr/bin/python3 1
  5. Überprüfen Sie die Python-Version – python --version
  6. Getan.
root@debian:~# python --version
Python 2.7.16