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

Non-ASCII character

Non-ASCII character '\xef'
SyntaxError: Non-ASCII character '\xef' in file en-1versuch.py on line 12, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

Diese Fehlermeldung weisst auf eine fehlende Definition des ASCII Codes hin.

Die vollständige Python-Quelldatei sollte eine einzige Codierung verwenden. Das Einbetten unterschiedlich codierter Daten ist nicht zulässig und führt zu einem Decodierungsfehler beim Kompilieren des Python-Quellcodes. Jede Codierung, die die Verarbeitung der ersten beiden Zeilen auf die oben angegebene Weise ermöglicht, ist als Quellcode-Codierung zulässig. Dies umfasst ASCII-kompatible Codierungen sowie bestimmte Mehrbyte-Codierungen wie Shift_JIS. Es enthält keine Codierungen, die zwei oder mehr Bytes für alle Zeichen verwenden, wie z. UTF-16. Der Grund dafür ist, den Codierungserkennungsalgorithmus im Tokenizer einfach zu halten.

Dies kann durch Angabe von

# -*- coding: utf-8 -*-

gelöst werden. Es gibt natürlich weitere ASCII Codes. Die Python Seite ist hier zu finden: https://www.python.org/dev/peps/pep-0263/

„UnicodeDecodeError: ‚utf-8‘ codec can’t decode byte 0xff in position 0: invalid start byte“

Hier gibt es Infos zur Programmiersprache Python

import fileinput
import re
input=open("wolf.txt","r")
output=open("output.txt","w")
for line in input:
        re.search(r"ряд","Runde")
        output.write(line)
input.close()
output.close()

In diesem Fall ist die Codierung der Datei nicht angegeben. Es muss diese bei input=open als Argument mit angegeben werden:

import fileinput
import re
input=open("wolf.txt","r","utf-8")
output=open("output.txt","w")
for line in input:
re.search(r"ряд","Runde")
output.write(line)
input.close()
output.close()

SyntaxError: ‚break‘ outside loop

Um break zu nutzen muss eine Schleife existieren. In einer if-Anweisung kann es zum Beispiel nicht genutzt werden.

Was bedeutet ‚break‘ outside loop in Python? Die break-Anweisung kann nur in einer for-Schleife oder einer while-Schleife verwendet werden. Der Fehler break außerhalb der Schleife bedeutet, dass Ihr Code eine break-Anweisung enthält, die sich nicht innerhalb einer Schleife befindet. Die häufigste Ursache für diesen Fehler ist das Einrücken. Sie haben eine break-Anweisung, die sich Ihrer Meinung nach in einer Schleife befindet. Die Einrückungsstufen bedeuten jedoch, dass dies nicht der Fall ist. Überprüfen Sie Ihre Einrückungen – Der gesamte Code, der sich innerhalb der Schleife befinden soll, sollte vom Beginn der Schleife an dieselbe Einrückungsstufe haben. Die andere Fehlerursache ist ein Missverständnis darüber, was eine Unterbrechung bewirkt. Die einzige Funktion besteht darin, die aktuelle Schleife zu stoppen, das Programm nicht zu beenden oder eine Funktion oder etwas anderes zu stoppen.

Die Funktion exit() ist eventuell sinnvoll.

name Label is not defined

  File "ersetzen-tk.py", line 6, in <module>
    label=Label(fenster, text="Willkommen", bg="red", fg="white")
NameError: name 'Label' is not defined

Die Ursache kann der fehlende Import der Label Klasse sein.

über from tkinter import Label kann dies nachgeholt werden.

from tkinter import Label 

AttributeError: module ‚tkinter‘ has no attribute ‚tK‘

Dieser Fehler kann auftreten wenn die Datei tkinter.py genannt wurde.

AttributeError: ‚_tkinter.tkapp‘ object has no attribute ‚Label‘

AttributeError: ‚_tkinter.tkapp‘ object has no attribute ‚Label‘

In diesem Fall überprüfen ob die Label importiert wurden durch

from tkinter import Label

Oder indem alle Module importiert wurden von tkinter:

from tkinter import *

TypeError: ‚module‘ object is not callable

michi@michi-debian:~/python$ python maschenzaehler.py 
Traceback (most recent call last):
  File "maschenzaehler.py", line 3, in <module>
    root = tk()
TypeError: 'module' object is not callable

Der dazugehörige Quelltext war:

import tkinter as tk
from tkinter import *
root = Tk()

w = Label(root, text="Willkommen zum Maschenzaehler")
w.pack()

root.mainloop()

Durch das hinzufügen des Präfix tk wird das Problem gelöst
root=tk.Tk()

import tkinter as tk
from tkinter import *
root = tk.Tk()

w = Label(root, text="Willkommen zum Maschenzaehler")
w.pack()

root.mainloop()