Transparente Bilder in Python einfügen

Fragen zu Tkinter.
BlackJack

@M96Wayne: Das Argument gibt die Koordinaten der beiden gegenüberliegenden Ecken eines Rechtecks an (x_1, y_1, x_2, y_2), wobei `x_1` und `y_1` die linke obere Ecke beschreiben und `x_2` und `y_2` die rechte untere Ecke. Wenn also das Bild auf der Schaltfläche 128 Pixel breit und hoch ist, dann schneidet man mit (0, 0, 128, 128) aus dem Hintergrundbild ganz oben links einen Bereich aus der 128 Pixel breit und hoch ist, und da wird dann das Bild für die Schaltfläche mit `paste()` drüber gelegt. Du hast jetzt aus den 0en jeweils eine 100 gemacht, das bedeutet also `crop()` wird (100, 100, 128, 128) übergeben, also ein viel kleineres Stück ausgeschnitten, das nur noch 28 Pixel breit und hoch ist, und da kann man kein 128×128 Pixel Bild drüber legen. Wenn Du beim Ausschneiden die linke obere Ecke verschiebst, dann musst Du das mit der rechten unteren ebenfalls machen, wenn der Ausschnitt gleich gross bleiben soll.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

Ok! Habs jetzt endlich. Danke!
BlackJack

@M96Wayne: Da die 100 an zwei verschiedenen Stellen im Programm vorkommen sollte man die übrigens besser als Konstanten definieren oder den Benutzer der Klasse als Argumente (möglicherweise mit Default-Werten) übergeben lassen. Sonst muss man wenn man diesen Wert mal ändern will, daran denken auch alle Vorkommen zu verändern, statt nur an einer zentralen Stelle den Wert einmal zu ändern.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

Wie kann ich das dann ändern würde es nämlich dann so machen:

Code: Alles auswählen

self.button.place(x=k, y=f, width=width, height=height)
button_image = image.crop((k, f, button_width+k,button_height+f))
Bloß weiß ich halt nich wie man das dann definiert bzw umsetzt, aber vom Prinzip her ist es ja richtig. Man müsste nur noch x bzw k irgendwo eingeben können
BlackJack

@M96Wayne: Man könnte die Werte wie gesagt als Argumente übergeben lassen wenn so ein `PleaseFindABetterNameForThisClass`-Exemplar erzeugt wird. Da die in der anderen Methode benötigt werden, gehören sie zum Zustand des Objekts, müssen also als Attribute gesetzt werden. Und auf jeden Fall unter besseren Namen als `k` und `f`.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

Ok! Ich werde es mal versuchen, wenn es nicht klappt, wende ich mich an Dich (Euch).
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

Komme einfach nicht darauf, wie ich das anstellen soll.
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

Kann mir nochmal jemand helfen, wenn jemand Zeit hätte?
BlackJack

@M96Wayne: Wo liegt denn das Problem?
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

Ich weiß einfach nicht wie ich die Argumente (z.b f,k) einbringe und das dann in die Klasse "Please..." (-->_init_) mache.
Desweiteren habe ich das Problem, dass ich auch mehrere Transparente Bilder mit verschiedenen Commands miteinbringen muss, weil dieses Programm jetzt nur auf eine PNG.Datei programmiert ist.
Ich bekomm einfach nicht hin, dass ich meherer PNG Dateien miteinbringe.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

M96Wayne hat geschrieben:Ich weiß einfach nicht wie ich die Argumente (z.b f,k) einbringe und das dann in die Klasse "Please..." (-->_init_) mache.
Du meinst jetzt aber (hoffentlich) nicht das hier?

Code: Alles auswählen

class Foo:
    def __init__(self, f, k):
        self.f = f
        self.k = k

obj = Foo("bar", 42)
print(obj.f)
print(obj.k)
M96Wayne hat geschrieben: Desweiteren habe ich das Problem, dass ich auch mehrere Transparente Bilder mit verschiedenen Commands miteinbringen muss, weil dieses Programm jetzt nur auf eine PNG.Datei programmiert ist.
Ich bekomm einfach nicht hin, dass ich meherer PNG Dateien miteinbringe.
Ohne Deinen Code zu kennen kann man nur allgemein sagen, dass Du eben entweder eine Schleife brauchst, die die einzelnen Bilder einliest und sequentiell verarbeitet, oder irgend einen Container (z.B. eine Liste), in dem Du alle Bilder vorhältst und auf diese mehrfach und in beliebiger Reihenfolge zugreifen kannst.

Das ist aber Basiswissen und das solltest Du haben, wenn Du Dich ein wenig mit Python beschäftigt hast :-) (Und wenn nicht, solltest Du ggf. noch einmal ein Tutorial durcharbeiten!)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
M96Wayne
User
Beiträge: 22
Registriert: Freitag 20. Juni 2014, 18:18

Ne hab ich nicht gemeint, aber egal für das Problem finde ich auch noch eine Lösung. :wink:
Auf diese Lösung (mit ein paar Unterschiedlichkeiten) bin ich auch gekommen.

An eine Liste hatte ich noch gar nicht gedacht!
Antworten