Python – die besten Beiträge

Python GUI Tkinter Buttons blinken bei laufender Akutalisierung?

Hallo,

ich möchte mit Phyton und der Bibliothek Tkinter eine GUI für ein Kartenspiel programmieren.

Für das Kartenspiel müssen ständig neue Karten geladen werden.

Das heißt, es wird zum Beispiel andauernd überprüft wie viele Karten die Spieler in der Auslage und in der Hand haben und dementsprechend werden dann Labels und Buttons generiert.

Die Idee ist, einfach laufend die GUI in gewissen Abständen (zum Beispiel einige Dutzend Millisekunden) zu aktualisieren.

Wenn ich das mache blinken die Labels und Buttons aber immer auf.

Nach Recherche soll das daran liegen, dass sie immer wieder in zu kurzen Abständen neu erstellt werden.

Man könnte die GUI natürlich immer nur dann neu erstellen lassen, wenn tatsächlich im Spiel etwas passiert.

Das passiert aber andauernd, weswegen es besser ist, einfach laufend die GUI zu aktualisieren.

Gibt es dafür noch eine andere Methode (Zum Beispiel PyGame anwenden)?

Hier ein Minimalbeispiel:

class DynamicInterfaceApp:
  def __init__(self):
    self.root = Tk()
    self.root.geometry("1000x500")
    self.update_interface_periodically()
  
  def update_interface(self):
    self.my_frame= Frame(self.root, bg="red")
    self.my_frame.place(x=0, y=0, relwidth=1, relheight=1) 
    self.my_button = Button(self.my_frame)
    self.my_button.place(x=0, y=0, width=50, height=50)
   
  def update_interface_periodically(self):
    self.update_interface()
    self.root.after(25, self.update_interface_periodically)

app = DynamicInterfaceApp()
app.root.mainloop()
App, Code, Programmiersprache, Python, Pygame, Tkinter

Wieso ändert Python das Foto zu einem weißen Hintergrund?

Hallo,

ich bin mal wieder beim Coden meines Video Editors auf einen Fehler gestoßen... Folgendes ist ein Ausschnitt meines Codes:

    global Medien_Importierungen, Maximale_Breite, Maximale_Höhe, Tkinter_Bild
    Videopfad = askopenfilename(filetypes =[('Video Files', '*.mp4')])
    Geladenes_Video = cv2.VideoCapture(Videopfad)
    Rückgabe, Einzelbild = Geladenes_Video.read()
    if Einzelbild.shape[0] / Maximale_Höhe > Einzelbild.shape[1] / Maximale_Breite:
        height = Maximale_Höhe
        width = int(Einzelbild.shape[1] * height / Einzelbild.shape[0])
    else:
        width = Maximale_Breite
        height = int(Einzelbild.shape[0] * width / Einzelbild.shape[1])
    Einzelbild = cv2.resize(Einzelbild, (width, height))
    Tkinter_Bild = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(Einzelbild, cv2.COLOR_BGR2RGB)))
    Thumbnail = Label(Medien, image = Tkinter_Bild)
    if Medien_Importierungen % 2 == 0:
        Thumbnail.place(x = Fenster.winfo_screenwidth() * 0.01 + Maximale_Breite / 2 - Einzelbild.shape[1] / 2, y = Fenster.winfo_screenheight() / 10 + (Fenster.winfo_screenwidth() * 0.01 + Maximale_Höhe) * int(Medien_Importierungen / 2) + Maximale_Höhe / 2 - Einzelbild.shape[0] / 2)
    else:
        Thumbnail.place(x = Fenster.winfo_screenwidth() * 0.11 + Maximale_Breite / 2 - Einzelbild.shape[1] / 2, y = Fenster.winfo_screenheight() / 10 + (Fenster.winfo_screenwidth() * 0.01 + Maximale_Höhe) * int(Medien_Importierungen / 2) + Maximale_Höhe / 2 - Einzelbild.shape[0] / 2)
    Medien_Importierungen += 1

Hier kann man Medien importieren, um sie am Ende auf die Timeline zu ziehen. Hierbei bin ich aber noch nicht weit wie ihr sieht. Auf jeden Fall wird diese Funktion jedes mal beim Drücken eines Buttons ausgeführt und es sollen dann neben- und untereinander die ersten Frames der verschiedenen Videos angezeigt werden. Wenn ich aber ein zweites Medium importiere, ändert sich das davor erstellte Bild zu einem komplett weißen Bild. Meine Frage wäre, wie ich das behebe...

Freue mich auf Hilfe...

Alex

Programmiersprache, Python, Python 3, Tkinter

Meistgelesene Beiträge zum Thema Python