Komischer Tkinter error

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

Please help me!

Exception has occurred: TypeError
__init__() missing 1 required positional argument: 'master'
File "/home/asdwa/Python/Ki/BilderKi/StableDiffusionApp-main/app.py", line 17, in <module>
prompt = ctk.CTkEntry(height=40, width=512, text_font=("Arial", 20), text_color="black", fg_color="white")
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Joa. Die Fehlermeldung ist da doch sehr eindeutig. Dir fehlt das Argument master. Das wird doch in https://github.com/TomSchimansky/Custom ... i/CTkEntry auch beschrieben.
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

So klappts aber auch nicht

Exception has occurred: TypeError
__init__() missing 1 required positional argument: 'master'
File "/home/peerpri07/Python/Ki/BilderKi/StableDiffusionApp-main/app.py", line 17, in <module>
prompt = ctk.CTkEntry(height=40, width=512, text_font=("Arial", 20), text_color="black", fg_color="white")x632")
app.title("Stable Bud")
ctk.set_appearance_mode("dark")

prompt = ctk.CTkEntry(master=root_tk, height=40, width=512, text_font=("Arial", 20), text_color="black", fg_color="white")
prompt.place(x=10, y=10)

lmain = ctk.CTkLabel(height=512, width=512)
lmain.place(x=10, y=110)

modelid = "CompVis/stable-diffusion-v1-4"
device = "cuda"
pipe = StableDiffusionPipeline.from_pretrained(modelid, revision="fp16", torch_dtype=torch.float16, use_auth_token=auth_token)
pipe.to(device)

def generate():
with autocast(device):
image = pipe(prompt.get(), guidance_scale=8.5)["sample"][0]

image.save('generatedimage.png')
img = ImageTk.PhotoImage(image)
lmain.configure(image=img)

trigger = ctk.CTkButton(height=40, width=120, text_font=("Arial", 20), text_color="white", fg_color="blue", command=generate)
trigger.configure(text="Generate")
trigger.place(x=206, y=60)

app.mainloop()Exception has occurred: TypeError
__init__() missing 1 required positional argument: 'master'
File "/home/peerpri07/Python/Ki/BilderKi/StableDiffusionApp-main/app.py", line 17, in <module>
prompt = ctk.CTkEntry(height=40, width=512, text_font=("Arial", 20), text_color="black", fg_color="white")x632")
app.title("Stable Bud")
ctk.set_appearance_mode("dark")

prompt = ctk.CTkEntry(height=40, width=512, text_font=("Arial", 20), text_color="black", fg_color="white")
prompt.place(x=10, y=10)

lmain = ctk.CTkLabel(height=512, width=512)
lmain.place(x=10, y=110)

modelid = "CompVis/stable-diffusion-v1-4"
device = "cuda"
pipe = StableDiffusionPipeline.from_pretrained(modelid, revision="fp16", torch_dtype=torch.float16, use_auth_token=auth_token)
pipe.to(device)

def generate():
with autocast(device):
image = pipe(prompt.get(), guidance_scale=8.5)["sample"][0]

image.save('generatedimage.png')
img = ImageTk.PhotoImage(image)
lmain.configure(image=img)

trigger = ctk.CTkButton(height=40, width=120, text_font=("Arial", 20), text_color="white", fg_color="blue", command=generate)
trigger.configure(text="Generate")
trigger.place(x=206, y=60)

app.mainloop()
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Bitte setze doch sowohl Code als auch Fehlermeldungen in Code-Tags. Dann werden sie nicht zu einer Wall of Text und die Einrückungen bleiben erhalten.
Die Fehlermeldung sagt noch immer, dass "master" als Argument fehlt.
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

und wie behebe ich das?
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

In den Fehlermeldungen fehöt das master-Argument bei der bemängelten Zeile.
Vielleicht steht sie im Quelltext drin. Ich bin mir nicht sicher, was du da gepostet hast - aber in dem was du ausführst, und was den Fehler wirft, steht dort das entsprechende Argument nicht.
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

sparrow hat geschrieben: Donnerstag 15. Dezember 2022, 18:32 In den Fehlermeldungen fehöt das master-Argument bei der bemängelten Zeile.
Vielleicht steht sie im Quelltext drin. Ich bin mir nicht sicher, was du da gepostet hast - aber in dem was du ausführst, und was den Fehler wirft, steht dort das entsprechende Argument nicht.

Code: Alles auswählen

import tkinter as tk
import customtkinter as ctk 

from PIL import ImageTk
from authtoken import auth_token

import torch
from torch import autocast
from diffusers import StableDiffusionPipeline 

# Create the app
app = tk.Tk()
app.geometry("532x632")
app.title("Stable Bud") 
ctk.set_appearance_mode("dark") 


prompt = ctk.CTkEntry(master=root_tk, height=40, width=512, text_font=("Arial", 20), text_color="black", fg_color="white") 
prompt.place(x=10, y=10)

lmain = ctk.CTkLabel(height=512, width=512)
lmain.place(x=10, y=110)

modelid = "CompVis/stable-diffusion-v1-4"
device = "cuda"
pipe = StableDiffusionPipeline.from_pretrained(modelid, revision="fp16", torch_dtype=torch.float16, use_auth_token=auth_token) 
pipe.to(device) 

def generate(): 
    with autocast(device): 
        image = pipe(prompt.get(), guidance_scale=8.5)["sample"][0]
    
    image.save('generatedimage.png')
    img = ImageTk.PhotoImage(image)
    lmain.configure(image=img) 

trigger = ctk.CTkButton(height=40, width=120, text_font=("Arial", 20), text_color="white", fg_color="blue", command=generate) 
trigger.configure(text="Generate") 
trigger.place(x=206, y=60) 

app.mainloop()



Exception has occurred: NameError
name 'root_tk' is not defined
File "/home/peerpri07/Python/Ki/BilderKi/StableDiffusionApp-main/app.py", line 18, in <module>
prompt = ctk.CTkEntry(master=root_tk, height=40, width=512, text_font=("Arial", 20), text_color="black", fg_color="white")



Wie behebe ich das jetzt?=
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Jetzt hast du zwar das master-Argument drin - aber du übegibst da etwas, das gar nicht existiert.
Wie die Fehlermeldung sagt: Du hast nichts an den Namen root_tk gebunden.

Die Dokumentation, die __deets__ freundlicherweise für dich verlinkt hat, gibt Auskunft darüber, was master sein muss. Ich zitiere: "root, tkinter.Frame or CTkFrame"
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

Das hab ich mir angeschaut check ich nicht
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Was "checkst" Du da nicht? Variablen, die man benutzen will, muß man auch definieren.
Mich wundert etwas, wie man 40 Zeilen Code schreiben kann, der aber schon beim Erstellen des ersten Entry-Elements abbricht. So kann programmieren nicht funktionieren. Programme entwickelt man Stück für Stück und macht erst weiter, wenn der Teil, den man bisher gemacht hat auch wirklich funktioniert. Erster Schritt sollte also sein, überhaupt erst einmal ein Fenster mit EINEM Entry zustande zu bringen; das ganze Firlefanz mit Farben und Schriften und Größen und der ganze Rest gehört erstmal weg.
Also fang mit

Code: Alles auswählen

import tkinter as tk
import customtkinter as ctk 

def main():
    app = tk.Tk()
    prompt = ctk.CTkEntry(master=root_tk)
    prompt.pack()
    app.mainloop()

if __name__ == "__main__":
    main()
an, das ist das minimale Programm, an dem Du scheiterst.
Hier habe ich schon den Code in Funktionen gepackt und statt absoluten Größenangaben `pack` benutzt, wie ein ordentliches GUI-Programm aufgebaut sein sollte. Mit so einem Startpunkt hast Du dann später auch weniger Schwierigkeiten (z.B. dass Du versehentlich globale Variablen benutzt, anstatt sie als Parameter an Deine Callbacks zu übergeben).
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

GUI-Objekte bilden eine Hierarchie. Ein Toplevel Fenster beinhaltet zB Frames, und die beinhalten Buttons oder andere Elemente. Du baust diese Hierarchie nicht auf. Deine Objekte hängen in der Luft. Schau dir die Doku und Beispiele an, und vergleich das mit deinem Code.
Antworten