Python Canvas mit zwei separierten Seiten?

Hey! Ich bin seit einiger Zeit dran in Python Filter für Bilder zu erstellen und habe jetzt einen Filter, welcher das Bild in einem "Low-Poly-Game-Look" erscheinen lässt (unten ist das Programm, es funktioniert ohne Probleme).

Der image_helper ist schon gegeben. Mein Ziel ist es jetzt beim Starten des Programms zu bekommen, dessen linke Hälfe des Bildes (50%) modifiziert ist mit den Dreiecken, und die rechte Seite (50 % vom Canva) unverändert bzw. original bleibt. Schnittgerade ist vertikal.

Ich habe schon versucht, diese beiden Hälften in ein Canva einzufügen, jedoch ist dabei die modifizierte Seite schwarz gewesen oder beide Seiten wurden gezeigt, jedoch auf unterschiedlichen Bildern. Langsam zweifle ich daran, ob mein Ziel überhaupt möglich ist.

Ist es möglich so etwas zu machen?
Wenn ja, warum funktioniert es bei mir nicht bzw. woran könnte es liegen?

from image_helper import *
 
img = load_rgb_image('canva_test.jpg')
 
w,h = img.size
 
pixels = load_rgb_pixels_2d(img)
 w,h = img.size
 new = new_rgb_image(w, h)
 c = Canvas(new)
 
for x in range(w):
   for y in range(h):
       if x % 5 == 0 and y % 5 == 0:
           r, g, b = pixels[x][y]
           polygon_radius = random.randint(5,15)
           polygon_rot = random.randint(0, 360)
           c.polygon(x, y, polygon_radius, 3, (r,g,b), rot=polygon_rot, outline=None, width=0)
 
c.show()

(image_helper:)

from PIL import Image
from PIL import ImageDraw
import random

def load_rgb_pixels_2d(filename):
    if type(filename) == type('foo'):
        im = Image.open(filename)
    else:
        im = filename
    w, h = im.size
    data = im.getdata();
    return [[data[y*w + x] for y in range(h)] for x in range(w)]

def new_rgb_image(w, h, pixels=None):
    im = Image.new('RGB', (w,h))
    def mapInt(p):
        r,g,b = p
        return int(r), int(g), int(b)
    if pixels is not None:
        if isinstance(pixels[0], list):
            pixels = list(zip(*pixels))
            pixels = [mapInt(item) for sublist in pixels for item in sublist]
        else:
            pixels = list(map(mapInt, pixels))
        im.putdata(pixels)
    return im

class Canvas:
        
    def polygon(self, x, y, r, s, c, rot=0, outline=None, width=0):
        self.draw.regular_polygon((x,y,r),s,rot,c, outline)
Bildbearbeitung, Filter, Programm, programmieren, canvas, Image, Informatik, Programmiersprache, Python
Tkinter Button funktioniert nicht und Canvas Delete funktioniert nicht Bitte Hilfe?

Sehr geehrte Python und Tkinter Fans,

ich habe 2 Probleme. Und zwar ich möchte das wenn ein Knopf gedrückt wird 2 weitere Knöpfe am display erscheinen die man drücken kann. Ein Knopf z.B. "Ja" und der andere Knopf "Nein". Aber sie funktionieren nicht. Und wie kann ich es machen falls auf Nein gedrückt wird, dass dann die Buttons wieder verschwinden?

Mein Code:

def yes_option():
    root.destroy()


def close_root(event):
    assistant_lady_canvas =canvas.create_image(400, 540, image=assistant_lady, anchor=tk.NW)
    assistant_text = canvas.create_text(1400, 500, text="Möchten sie, das Spiel beenden?", fill="black", font=("Courier", 20, "bold"))
    canvas.create_image(0, 0, image="", anchor=tk.NW)
    #root.destroy()

    def close_root_destroy():
        canvas.delete(assistant_lady_canvas)
        canvas.delete(assistant_text)
        canvas.update()
        root.destroy()

    yes_button = canvas.create_image(1280, 600, image=yes)
    canvas.tag_bind(yes_button, "<Button-1>", yes_option)

    no_button = canvas.create_image(1520, 600, image=no)
    canvas.tag_bind(no_button, "<Button-1>", close_root_destroy)

Error:

Exception in Tkinter callback

Traceback (most recent call last):

 File "C:\Users\nicol\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__

  return self.func(*args)

TypeError: yes_option() takes 0 positional arguments but 1 was given

Vielen Dank im Vorraus!

Computer, programmieren, canvas, Python, game-development, Tkinter

Meistgelesene Fragen zum Thema Canvas