Seite 1 von 1

Hintergrundbild + Tabellarische Anordnung mehrerer Werte

Verfasst: Donnerstag 26. Mai 2011, 19:08
von Dark Shadow
Hallo!
Ich bräuchte für ein Projekt die Möglichkeit, ein Hintergrundbild in ein Tkinter-Fenster zu bekommen. Ich habe schon versucht, ein Label als "Oberwidget" zu verwenden, was allerdings nicht funktionierte (mein Button wurde anscheinend vor dem Label gepackt). Ein Frame bietet allerdings nicht die Möglichkeit, Bilder in den Hintergrund zu laden. Hat jemand eine Idee?

Außerdem bräuchte ich noch die tabellarische Anordnung von mehreren Elementen (auch in Tkinter). Das Ganze sollte in etwa so aussehen:
http://bytes.com/attachments/attachment ... rygrid.gif
Die Möglichkeit, Entrys zu benutzen fällt allerdings weg, weil ich die einzelnen Spalten skalierbar machen möchte. Hat vielleicht hier jemand eine Idee?

Ich bedanke mich schonmal im Vorraus,
Dark Shadow

Re: Hintergrundbild + Tabellarische Anordnung mehrerer Werte

Verfasst: Freitag 27. Mai 2011, 08:27
von Xynon1
Für das Hintergrundbild würde ich einen Canvas benutzen und dann ein Bild mit der create_image()-Methode auf diesen packen.

Für die Tabelle kann man auch Entries nehmen(die können auch skalierbar gemacht werden), das geht aber nur begrenzt, bei zu großen Tabellen könnte es starke Performance-Verluste geben. Hier sollte man Tk aufrüsten, dazu gibt es tktable um die Tk-Lib zu erweitern und einmal den TkTableWrapper um die Tabelle in Tkinter verfügbar zu machen.

Re: Hintergrundbild + Tabellarische Anordnung mehrerer Werte

Verfasst: Freitag 27. Mai 2011, 14:24
von Dark Shadow
Der Hintergrund funktioniert! Danke!

Die Tabelle kann ich leider nicht einbinden, da ich nicht weiß, wie man tktable "installieren" muss (in welche Ordner gehören welche Dateien?). Gibt es keinen Installer dafür? Ich habe in der Readme.txt gelesen, man soll _irgendwo_ "nmake makefile.vc" eingeben. Im CMD funktioniert das allerdings nicht (Befehl "nmake" nicht bekannt). Was muss ich tun, um tktable benutzen zu können?

Danke auf jeden Fall für deine schnelle Antwort,
Dark Shadow

Re: Hintergrundbild + Tabellarische Anordnung mehrerer Werte

Verfasst: Freitag 27. Mai 2011, 14:58
von Xynon1
Du musst die Source erst kompilieren, steht auch in der Anleitung, dafür nimmst du entweder cygwin, MinGW oder das VisualStudio 5+.
Wenn du es mit den Grundeinstellungen kompilierst ladet der Build in C:\Tcl von dort musst du es nur in deinen Python-Tcl-Ordner kopieren und das Paket dann nur noch in der "pkgIndex.tcl"-Datei eintragen.

Re: Hintergrundbild + Tabellarische Anordnung mehrerer Werte

Verfasst: Sonntag 29. Mai 2011, 09:27
von Dark Shadow
Danke!
Ich habe jetzt aber auch eine andere Möglichkeit gefunden (für Python 2.6.2):

http://blog.clintecker.com/post/1484533 ... and-python

Die Dateien sind bei tktable 2.7 in der "Tktable2.7-win32-x86.zip"-Datei. Dann einfach der obigen Anleitungen folgen. Tktable sollte funktionsbereit sein.

Danke für Deine schnelle Hilfe, Xynon1.
Dark Shadow

Re: Hintergrundbild + Tabellarische Anordnung mehrerer Werte

Verfasst: Dienstag 31. Mai 2011, 15:46
von Dark Shadow
Ich entschuldige mich für den Doppelpost, aber für diese Frage braucht man mMn keinen neuen Thread aufmachen:

Wie kann man Werte in die tktable.Table()-Tablle einfügen? insert funktioniert nicht, auch nicht set oder Ähnliches. Die Variante aus TkTableWrapper.py (variable=var) funktioniert seltsamerweise auch nicht. Die Variable existiert und ihre Namen sind unter tvar.names() "verfügbar". Gibt es vielleicht eine andere Möglichkeit, Werte in eine bestimmte Zelle einzufügen?

Danke,
Dark Shadow

Re: Hintergrundbild + Tabellarische Anordnung mehrerer Werte

Verfasst: Dienstag 31. Mai 2011, 16:26
von Xynon1
Ja, kann man ändern, einfach das ArrayVar berabeiten. Dieses stellt eine set-Methode und eine Index-Möglichkeit die Werte zu ändern. Musste auch ebend erstmal Nachsehen, die Index-Methode ist schon merkürdig, aber die set-Methode haut ein aus den Socken.

Die Syntax ist:

Code: Alles auswählen

array_var.set(**{"x,y" : value})
, wenn du es also so nutzen willst wie es der Wrapper momentan vorgibt, dann nimm besser die Index-Methode(welche die set-Methode aufruft):

Code: Alles auswählen

array_var['x,y'] = value
Ansonsten würde ich dir raten die stelle so umzuschreiben

Code: Alles auswählen

def set(self, (x, y), value):
    var._tk.call('array', 'set', str(var), ("{0},{1}".format(x, y), value))

def __setitem__(self, key, value):
    self.set(key, value)
dann kannst du es so nutzen:

Code: Alles auswählen

array[(x, y)] = value
Edit: Noch eine Anmerkung, das Wörterbuch ist implementiert um mehrere Positionen gleichzeitig zu setzen, um eine hohe Anzahl von Tk-Rufe zu vermeiden, also dann doch besser so belassen wie es ist, außer vieleicht die String-Formation.