Hallo,
ich habe diese Frage hier im Forum zwar schon gefunden, aber leider gab es dazu bis lang keine zufriedenstellende Antwort.
Deshalb frage ich hier nocheinmal:
Ist es möglich ein mit Tkinter erstelltes Fenster als Image abzuspeichern?
Ich kann zwar einen Screenshot machen, aber das Image enthält dann meinen kompletten Desktop, ich hätte gerne ein Bild in dem nur das Fenster abgebildet ist.
Danke schon mal im Voraus,
LordMyder
Ein mit Tkinter erstelltes Fenster speichern
Was meinst du mit "zufriedenstellend"? Eine für dich positive?lordmyder hat geschrieben:Hallo,
ich habe diese Frage hier im Forum zwar schon gefunden, aber leider gab es dazu bis lang keine zufriedenstellende Antwort.
Problem ist halt, dass es keine ganz und gar positive Antwort gibt.
Konkret: Tkinter bringt keine Möglichkeiten dafür mit, evtl. lässt sich mit PIL was machen, da bin ich mir nicht ganz sicher. Eine Alternative ist die Verwendung eines externen Programms, das aus dem Skript heraus aufgerufen wird.
Das funktioniert unter Windows z.B. mit Irfanview, das sich so konfigurieren lässt, dass nur das reine Tkinter-Fenster geknipst wird, falls gewünscht auch ohne Fensterdekoration.
Danke für deine Antwort.
Also ich bräuchte eine Python interne Lösung.
Hat irgendjemand eine Idee?
Also ich bräuchte eine Python interne Lösung.
Hat irgendjemand eine Idee?
Wenn ich dich richtig verstanden habe, hast du schon eine Lösung, bei der der gesamte Desktop aufgenommen wird. Falls ja: Poste doch mal diesen Teil aus deinem Code - vielleicht kann man daran was basteln.lordmyder hat geschrieben:Danke für deine Antwort.
Also ich bräuchte eine Python interne Lösung.
Hat irgendjemand eine Idee?
Das ist der Code-Schnippsel, mit dem ich einen Screenshot mache.
Code: Alles auswählen
import ImageGrab
img = ImageGrab.grab()
img.save(r"screenshot.png")
Die Doku zu ImageGrab verrät mir, dass man der Methode grab eine bounding-box für einen Ausschnitt des Bildschirms als Parameter mitgeben kann: http://www.pythonware.com/library/pil/h ... gegrab.htm
Das sollte doch genügen. Du bestimmst die Position deines Toplevel-Windows auf dem Bildschirm und nimmst nur diesen Ausschnitt.
Laut Doku funktioniert ImageGrab derzeit nur für Windows, so dass ich es selbst nicht testen kann.
Das sollte doch genügen. Du bestimmst die Position deines Toplevel-Windows auf dem Bildschirm und nimmst nur diesen Ausschnitt.
Laut Doku funktioniert ImageGrab derzeit nur für Windows, so dass ich es selbst nicht testen kann.
Unter Linux kann "ksnapshot" auch einzelne Fenster speichern.
Es ginge z.B. auch mit ImageMagick
http://tips.webdesign10.com/how-to-take ... untu-linux
Es ist nicht nachvollziehbar, warum eine python-interne Lösung benötigt werden sollte.
Gruß
Es ginge z.B. auch mit ImageMagick
http://tips.webdesign10.com/how-to-take ... untu-linux
Es ist nicht nachvollziehbar, warum eine python-interne Lösung benötigt werden sollte.
Gruß
Warum nicht? Vielleicht möchte der OP sein Programm veröffentlichen und sich nicht von externen Programmen abhängig machen? Vielleicht sogar vermarkten.abgdf hat geschrieben:Es ist nicht nachvollziehbar, warum eine python-interne Lösung benötigt werden sollte.
Wenn es eine Python-interne Lösung für ein Problem gibt, würde ich die in der Regel auch vorziehen.
Zum Thema Linux: Es geht ja darum, aus dem Skript heraus den Screenshot zu erzeugen und nicht ein Programm aufzurufen, das dann wiederum bedient werden muss, um den Screenshot zu bekommen.
Mit knapshot ist das nur über DCOP möglich, mit ImageMagick ist es zum einen nicht so einfach gezielt nur ein Fenster zu knipsen und zum anderen lässt sich IMHO das Piepsen bei Beginn und Ende des Prozesses nicht abstellen.
Und in beiden Fällen gilt: Der Anwender braucht zusätzlich diese Programme.
Hey,
danke Numerix für deine Antworten. Ich habe darauf basierend eine Lösung entwickelt. Funktioniert auch sehr gut.
danke Numerix für deine Antworten. Ich habe darauf basierend eine Lösung entwickelt. Funktioniert auch sehr gut.
Zuletzt geändert von lordmyder am Dienstag 18. November 2008, 17:22, insgesamt 1-mal geändert.
Hat mich auch schon gelegentlich genervt, sehe ich aber nicht nur negativ: Manchmal ist eine vermeintlich "dumme Antwort" vielleicht auch nur deshalb dumm, weil der, der sie als dumm empfindet nicht versteht, warum sie nicht dumm ist. Anders gesagt: Es soll ja vorkommen, dass andere in einem bestimmten Bereich einen Wissensvorsprung haben oder eine Idee, die man selbst nicht hatte und in deren Ermangelung man meint, einen bestimmten Weg gehen zu müssen, den man vielleicht aber gar nicht gehen muss, es bloß nicht besser wusste.lordmyder hat geschrieben:Es stört mich ungemein, dass immer wenn ich irgendwas frage irgendwelche dummen Antworten kommen wie hier von abgdf.
Wenn ich eine interne Lösung suche, dann hat das seinen Grund.
Ich finde es total nervig, dass man sich immer rechtfertigen muss wenn man irgendwas spezielles sucht.
Und: Angesichts dessen, dass man in aller Regel auf so ziemlich alle Fragen rund um Python in diesem Forum sehr schnell und sehr kompetent geantwortet bekommt, kann man solche Dinge vielleicht einfach in Kauf nehmen und wegstecken.
Ich finde es halt sehr unhöflich, wenn man etwas Bestimmtes fordert, aber nicht sagt, warum, so nach dem Motto "das braucht ihr nicht zu wissen".Es stört mich ungemein, dass immer wenn ich irgendwas frage irgendwelche dummen Antworten kommen wie hier von abgdf.
Das kannst Du vielleicht mit Deinen Angestellten machen, aber nicht mit freiwilligen Helfern.
Gruß
Zum einen hättest du den Grund nennen können, warum du eine interne Lösung benötigst, zum anderen konnte abgdf nicht wissen, dass du nur eine Windows-Lösung benötigst. Da PIL aber nur unter Windows arbeitet, hat er dir Alternativen genannt, die auch unter Linux tun.lordmyder hat geschrieben:Eins möchte ich gerne noch los werden:
Es stört mich ungemein, dass immer wenn ich irgendwas frage irgendwelche dummen Antworten kommen wie hier von abgdf.
Insofern war abgdfs Posting vielleicht nicht direkt zielführend, aber es als dumm zu bezeichnen, ist ... dumm

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Bin auch der Meinung, aber habe lordmyders Account auf dessen eigenen Wunsch gelöscht. Soll sich jeder das seine denken und für sich behalten. Mache den Thread nun zu, da die Diskussion wohl hiermit zu keinem konstruktivem Ziel führen wird.lunar hat geschrieben:Insofern war abgdfs Posting vielleicht nicht direkt zielführend, aber es als dumm zu bezeichnen, ist ... dumm
Ich denke ich spreche für das ganze Moderatorenteam wenn ich konstruktive, aber "nicht 100% zum Thema passende" Antworten wie die von abgdf durchaus auch gutheiße. Meine Erfahrung war, dass es oft sinnvoll ist, auch noch andere Tipps und Lösungvorschläge zumindest einmal anzuhören: oft wurde eben auf diesem Wege eine bessere Lösung gefunden, als auf dem Weg der vom Threadstarter bedacht wurde.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice