2017-01-17 2 views
1

Momentan erstelle ich tkinter GUI App und ich verwende einige Bilder als Symbole für Elemente in Treeview Widget. Um sich als Referenz zu lesen und zu halten habe ich diesen Code:Die Art und Weise der Verwendung von Bildern in Tkinter als Symbole für die beste Leistung

self.logoadd = tk.PhotoImage(file='../img/add.png') 
self.logodel = tk.PhotoImage(file='../img/delete.png') 
... 
self.logoedit = tk.PhotoImage(file='../img/edit.png') 

#Keep them as references 
self.imgAdd = self.logoadd 
self.imgDel = self.logodel 
... 
self.imgEdit = self.logoedit 

Und ich denke, das ist keine gute Praxis ist, wenn es mehr als 30 Bilder verwendet. Ein weiterer Ansatz, der mir in den Sinn kam, ist:

  • Bilder als Byte-Zeichenfolge in .py-Datei speichern oder;
  • Verwenden Sie die for-Schleife, um alle Bilder im Ordner abzurufen, übergeben Sie sie als Variable.

Ich brauche einen Rat von erfahrenen GUI-Entwicklern. Welcher Weg ist der beste für die Performance und wird in GUI-Praktiken verwendet? (Sein mögen alle meine Wege sind falsch)

Zur Information: Größe dieser Bilder ist 16x16 und Bilder für Datei-Icons verwendet

+1

Ich verstehe nicht ganz, was du mit _best performance_ meinst, denn es scheint, als ob du nach einer Möglichkeit fragst, 30+ Item-Zuweisungen zu vermeiden. Wenn dies der Fall ist, verwenden Sie stattdessen ein Wörterbuch, um alle "PhotoImage" zu speichern und mit dem zugewiesenen Schlüssel zu erhalten. –

+0

Ich meine durch beste Leistung ist sowohl Geschwindigkeit und Code. In der Baumansicht können sich hundert Elemente befinden und ihre Symbole können sich unterscheiden. Daher sollte das Lesen der richtigen Bilder und das Einfügen in die GUI schnell und einfach zu warten sein. – bzimor

+0

Wenn Sie nicht Tausende oder Zehntausende von Bildern haben, ist der Leistungsunterschied nicht wahrnehmbar. –

Antwort

1

Was ich in mehreren tkinter Anwendungen verwendet haben, denen PhotoImage ist es, die Bilder zu laden in ein Wörterbuch, um einen Bezug zu ihnen zu behalten.

Sie können es manuell so tun, was zu empfehlen ist, wenn Sie ein paar Bilder haben, weil es einfacher ist zu sehen, was Sie haben.

import tkinter as tk 

image_cache = { 'add' : tk.PhotoImage(file = 'add.png'), 
       ... 
      } 

Oder die kompaktere und dynamische Methode ist das os Modul und Wörterbuch Verständnis zu verwenden. Bei Verwendung dieser Methode werden alle Ihre Schlüssel als Dateiname für Ihr Bild verwendet, um den Zugriff auf die gewünschten Bilder zu erleichtern.

Ich bin nicht sicher, ob diese Methode die beste Leistung bietet, aber es ist sauber, kompakt und verwendbar.

+0

Vielen Dank, @Steven Summers. 2-Variante passt in meiner Situation und hat gut funktioniert. – bzimor

Verwandte Themen