Tkinter – die besten Beiträge

Wie starte ich die While Schleife in Python neu?

Hallo!

Ich programmiere aktuell einen "Vokabelabfrager". Dazu hätte ich eine Frage. Und zwar arbeite ich grafisch mit Tkinter. Doch ich bin gerade in einer While Schleife, in der alles funktioniert, aber dann will die While Schleife sich nicht mehr neustarten, denn sie hat schon erledigt was sie machen sollte, und will nicht weiter abfragen, weil sie dies schon gemacht hat.

Das ist ein Ausschit meines Codes:

weiter = False


def Prüfungs_Start():
    global weiter
    weiter = True
    while weiter == True:
        weiter = False
        Prüfungs_Start_Fenster = Tk()
        Prüfungs_Start_Fenster.title("Prüfung")
        Prüfungs_Start_Fenster.geometry("400x500")
        #Random Zeile finden
        Datei = open("Vokabeln.txt", "a")
        Datei = open("Vokabeln.txt", "r")
        Datei_Anzahl_Zeilen = 0
        for Zeile in Datei:
            Datei_Anzahl_Zeilen += 1
        Datei.seek(0)
        Randomzeile = randint(1, Datei_Anzahl_Zeilen)
        Zähler = 1
        for Zeilen_Inhalt in Datei:
            if Zähler == Randomzeile:
                Random_Zeilen_Inhalt = Zeilen_Inhalt
            Zähler += 1
        #2 Vokabeln, die in der ausgewählten Zeile stehen, in 2 Variablen speichern
        Ort = Random_Zeilen_Inhalt.find("'")
        TestVokabel1 = Random_Zeilen_Inhalt[0:Ort]
        TestVokabel2 = Random_Zeilen_Inhalt[Ort+1:-1]
        Label(Prüfungs_Start_Fenster, text = f"Ausgangs-Vokabel: {TestVokabel1}", font = "Arial_Black 20").place(x = 10, y = 10)
        Eingegebenes_Ergebnis = Entry(Prüfungs_Start_Fenster)
        Eingegebenes_Ergebnis.place(x = 10, y = 50)
        def Prüfung():
            if Eingegebenes_Ergebnis.get() == TestVokabel2:
                Label(Prüfungs_Start_Fenster, text = "Richtig!         ", font = "Arial 21", fg = "green").place(x = 10, y = 180)
            else:
                Label(Prüfungs_Start_Fenster, text = "Leider falsch", font = "Arial 21", fg = "red").place(x = 10, y = 180)


        Button(Prüfungs_Start_Fenster, text = "Fertig", command = Prüfung).place(x = 10, y = 100)
        def Weiter():
            global weiter
            weiter = True
            Prüfungs_Start_Fenster.destroy()
        Button(Prüfungs_Start_Fenster, text = "Weiter", command = Weiter).place(x = 10, y = 130)

Nun habe ich hinten diesen "Weiter" Button, der die Variable "weiter" wieder auf einen anderen Wert weisen soll, um die While Schleife wieder laufen zu lassen. Das möchte sie aber wohl nicht, denn sie hat ja schon abgefragt und da hat es nicht gestimmt.

Wenn ihr wisst, wie ich es schaffen kann, dass die While Schleife neu abfragt, bitte hilft mir,

euer Alex

programmieren, Programmiersprache, Python, Tkinter

Datei finden Fehler?

Hallo,

ich mache ein Programm in Python (mit Turtle), welches erkennt wo die ISS ist. Aber (obwohl es in demselben Ordner ist) findet es die Datei 'map.gif' nicht. Kann mir da jemand helfen?

Danke im voraus!

Code:

import json
import turtle
import urllib.request


url = 'http://api.open-notify.org/astros.json'
antwort = urllib.request.urlopen(url)
ergebnis = json.loads(antwort.read())


print('Personen im Weltall: ', ergebnis['number'])


personen = ergebnis['people']
#print(personen)



for p in personen:
    print(p['name'], 'in', p['craft'])


url = 'http://api.open-notify.org/iss-now.json'
antwort = urllib.request.urlopen(url)
ergebnis = json.loads(antwort.read())


standort = ergebnis['iss_position']
breitengrad = float(standort['latitude'])
längengrad = float(standort['longitude'])
print('Breitengrad: ', breitengrad)
print('Längengrad: ', längengrad)


bildschirm = turtle.Screen()
bildschirm.bgpic("map.gif")

Fehlermeldung:

File "/home/pi/Dokumente/Python programme/Standart/Wo ist die ISS?", line 29, in <module>
    bildschirm.bgpic("map.gif")
  File "/usr/lib/python3.7/turtle.py", line 1481, in bgpic
    self._bgpics[picname] = self._image(picname)
  File "/usr/lib/python3.7/turtle.py", line 479, in _image
    return TK.PhotoImage(file=filename)
  File "/usr/lib/python3.7/tkinter/__init__.py", line 3545, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "/usr/lib/python3.7/tkinter/__init__.py", line 3501, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't open "map.gif": no such file or directory
Python, Python 3, Tkinter

Tkinter Button funktioniert nicht und Canvas Delete funktioniert nicht Bitte Hilfe?

Sehr geehrte Python und Tkinter Fans,

ich habe 2 Probleme. Und zwar ich möchte das wenn ein Knopf gedrückt wird 2 weitere Knöpfe am display erscheinen die man drücken kann. Ein Knopf z.B. "Ja" und der andere Knopf "Nein". Aber sie funktionieren nicht. Und wie kann ich es machen falls auf Nein gedrückt wird, dass dann die Buttons wieder verschwinden?

Mein Code:

def yes_option():
    root.destroy()


def close_root(event):
    assistant_lady_canvas =canvas.create_image(400, 540, image=assistant_lady, anchor=tk.NW)
    assistant_text = canvas.create_text(1400, 500, text="Möchten sie, das Spiel beenden?", fill="black", font=("Courier", 20, "bold"))
    canvas.create_image(0, 0, image="", anchor=tk.NW)
    #root.destroy()

    def close_root_destroy():
        canvas.delete(assistant_lady_canvas)
        canvas.delete(assistant_text)
        canvas.update()
        root.destroy()

    yes_button = canvas.create_image(1280, 600, image=yes)
    canvas.tag_bind(yes_button, "<Button-1>", yes_option)

    no_button = canvas.create_image(1520, 600, image=no)
    canvas.tag_bind(no_button, "<Button-1>", close_root_destroy)

Error:

Exception in Tkinter callback

Traceback (most recent call last):

 File "C:\Users\nicol\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__

  return self.func(*args)

TypeError: yes_option() takes 0 positional arguments but 1 was given

Vielen Dank im Vorraus!

Computer, programmieren, canvas, Python, game-development, Tkinter

Python - tkinter text eingabe in variable?

Hallo,

ich habe folgendes programmiert:

import tkinter as tk
import os


root = tk.Tk()
root.geometry("400x240")


def encrypt(filename):
    to_encrypt = open(filename, "rb").read()
    size = len(to_encrypt)
    key = os.urandom(size)
    with open(filename + ".lqk", "wb") as key_out:
        key_out.write(key)
    encrypted = bytes(a ^ b for (a, b) in zip(to_encrypt, key))
    with open(filename, "wb") as encrypted_out:
        encrypted_out.write(encrypted)  
    filename = textExample.get(1.0, tk.END+"-1c")
    encrypt(filename)




def decrypt(filename, key):
    file = open(filename, "rb").read()
    key = open(key, "rb").read()
    decrypted = bytes(a ^ b for (a, b) in zip(file, key))
    with open(filename, "wb") as decrypted_out:
        decrypted_out.write(decrypted)
    fileTest = filename + ".lqk"
    try:
        os.remove(fileTest)
    except OSError as e:
        print(e)
    else:
        print("Datei erfolgreich gelöscht!")
    filename = textExample.get(1.0, tk.END+"-1c")
    decrypt(filename, filename + ".lqk")
    
    


textExample=tk.Text(root, height=10)
textExample.pack()
btnEncrypt=tk.Button(root, height=1, width=10, text="Encrypt", 
                    command=encrypt)
btnDecrypt=tk.Button(root, height=1, width=10, text="Decrypt", 
                    command=decrypt)


btnEncrypt.pack()
btnDecrypt.pack()


root.mainloop()

Nur leider funktioniert dies nicht. In der Debugging Console bekomme ich folgende Fehlermeldung:

Bei der Encrypt Funktion:

PS C:\Users\elias\Desktop\Python>  c:; cd 'c:\Users\elias\Desktop\Python'; & 'C:\Users\elias\AppData\Local\Programs\Python\Python310\python.exe' 'c:\Users\elias\.vscode\extensions\ms-python.python-2021.12.1559732655\pythonFiles\lib\python\debugpy\launcher' '52518' '--' 'c:\Users\elias\Desktop\Python\main.py'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\elias\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
TypeError: encrypt() missing 1 required positional argument: 'filename'


Decrypt Funktion:

Traceback (most recent call last):
  File "C:\Users\elias\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
TypeError: decrypt() missing 2 required positional arguments: 'filename' and 'key'      


Wie kann ich das Problem jetzt lösen?

Danke im Vorraus!

VG!

programmieren, Python, Python 3, Tkinter

Tkinter hängt sich auf wenn ich den Button drücke?

Hi, ich soll für die Schule in Informatik ein Verschlüsselungsprogramm schreiben. Ich habe hier die Caeser verschlüsselung genommen. Der Code hat ohne Tkinter Super Funktioniert:

def Code():
code = input("Code: ")
Verschiebung = int(input("Verschiebungsfaktor: "))
coded = "".join(chr((ord(char) + Verschiebung) % 256) for char in code)
print("Verschlüsselter Code:", coded)
def Encode():
code = input("Verschlüsselung: ")
x = int(input("Verschiebungsfaktor: "))
Verschiebung = -x
encoded = "".join(chr((ord(char) + Verschiebung) % 256) for char in code) print("Entschlüsselter Code:", encoded)

Hier ist der Code mit Tkinter:

from tkinter import *
def Code():
  code = input(b.get())
  Verschiebung = int(input(d.get()))
  coded = "".join(chr((ord(char) + Verschiebung) % 256) for char in code)
  h.config(text=coded)
def Encode():
  code = input(b.get())
  x = int(input(d.get()))
  Verschiebung = -x
  encoded = "".join(chr((ord(char) + Verschiebung) % 256) for char in code)
  h.config(text=encoded)
F = Tk()
F.title('Coding')
F.geometry('500x500')
F.config(bg='gray')
a = Label(master=F, text='Eingabe:', fg='white', bg='black', font=('Arial',16))
a.place(x=50, y=50, width=200, height=50)
b = Entry(master=F, text='', font=('Arial',16))
b.place(x=275, y=50, width=200, height=50)
c = Label(master=F, text='Schlüssel:', fg='white', bg='black', font=('Arial',16))
c.place(x=50, y=125, width=200, height=50)
d = Entry(master=F, text='', font=('Arial',16))
d.place(x=275, y=125, width=200, height=50)
e = Button(master=F, text='Verschlüsseln', fg='white', bg='black', font=('Arial',16), command=Code)
e.place(x=50, y=200, width=200, height=50)
g = Button(master=F, text='Entschlüsseln', fg='white', bg='black', font=('Arial',16), command=Encode)
g.place(x=275, y=200, width=200, height=50)
h = Label(master=F, text='', font=('Arial',16))
h.place(x=50, y=275, width=425, height=50)
F.mainloop()

Das Problem ist, das sich Tkinter aufhängt und abstürtzt wenn ich einen Button drücke

Computer, Technik, programmieren, Python, Tkinter

Meistgelesene Beiträge zum Thema Tkinter