pyautogui funktioniert nicht.

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
michii1324
User
Beiträge: 3
Registriert: Dienstag 27. Februar 2024, 14:41

Hallo Zusammen, und zwar suche ich nach Hilfe. will ein Foto anklicken lassen bzw ein Button und es klappt nicht. ich hatte sowas vor einen monat programmeirt und es hat alles funktioniert. ich kriege jetzt keine x und y korndinate vom Bild sondern ein objekt ich weis nicht wieso. vill könnt ihr mir da weiterhelfen
der code geht wie folgt:

import pyautogui
cords = pyautogui.locateAllOnScreen(image='bild1.png')
pyautogui.click(cords).

TypeError: int() argument must be a string, a bytes-like object or a real number, not 'generator'

jedoch kriege ich den fehler raus das das keien x, y korndinate ist bzw keine int zahl ist.
wen ich den Befehl Printe kommt folgendes raus:
print(cords)
generator object _locateAll_opencv at 0x000 die zahl möchte ich nicht auschreiben aufjeden fall eine hex zahl.


ich freue mich um eine schnelle Rückantwort und um eure Hilfe danke.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

locateAllOnScreen liefert nicht nur eine Koordinate, sondern alle, an denen sich das Bild befindet. Daher auch das All im Namen.
Den Generator kann man dann mit einer for-Schleife benutzen:

Code: Alles auswählen

for coordinate in cords:
    print(coordinate)
michii1324
User
Beiträge: 3
Registriert: Dienstag 27. Februar 2024, 14:41

okay danke habs. Ich hab noch eine frage und zwar zur der function time.sleep villeicht kennst du dich da aus und zwar wen ich einen time .sleep befehl in eine def funktion schreibe schläft das ganze script und nicht nur die def funktion auch die dui die ich mir gemacht habe hast du eine idee wie ich eine def funktion und nicht die gui zum warten b ringen kann ?
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

`sleep` stopp das Skript an der Stelle, an der es eingebaut wurde. Man kann nicht eine Funktion schlafen legen, dann irgendwo weiter machen und wenn die Funktion ausgeschlafen hat, wieder darin weiter machen.
Was für ein Problem willst du damit denn lösen?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
michii1324
User
Beiträge: 3
Registriert: Dienstag 27. Februar 2024, 14:41

ich hab beispiel eine gui gebaut und die stürtzt durch den sleep befehl ab.
in einer def funktion aber nur die def funktion soll warten nicht die gui.
zb.
import tkinter as tk
import time

label = 'läuft'

def die_def_Funktion():
global label
label.config(text='und läuft')
window.update()
time.sleep(5)
label.config(text='und in der zwischenzeit gui am abstürzen')


window = tk.Tk()
window.minsize(300,300)
label = tk.Label(window, text=label)
label.grid()
button_start = tk.Button(window, text='start', command=die_def_Funktion)
button_start.grid()

window.mainloop()
wen man es so schreibt bleibt tkinter mitstehen.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

wie Dennis89 schon geschrieben hat, darf es kein sleep geben. Man muß immer sofort die Kontrolle an die Hauptschleife zurückgeben. Für solche Fälle setzt man einen Timer mit after.
global darf es in einem Programm nicht geben, alles was Funktionen brauchen, bekommen sie über ihre Argumente.
`label` wird einmal an einen String gebunden und einmal an ein Label. Variablen sollten immer nur Werte eines Typs zugewiesen bekommen.
`update` hat in einem GUI-Programm nichts zu suchen.
Die Größe eines Fensters ergibt sich durch dessen Inhalt, man gibt keine Größen vor.
grid ohne Argumente macht keinen Sinn.

Code: Alles auswählen

from functools import partial
import tkinter as tk

def ende(label):
    label['text'] = 'und in der zwischenzeit gui am abstürzen'

def die_def_funktion(label):
    label['text'] = 'und läuft'
    label.after(5000, ende, label)

def main():
    window = tk.Tk()
    label = tk.Label(window, text="läuft")
    label.pack()
    button_start = tk.Button(window, text='start', command=partial(die_def_funktion, label))
    button_start.pack()
    window.mainloop()

if __name__ == "__main__":
    main()
Antworten