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.
pyautogui funktioniert nicht.
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:
Den Generator kann man dann mit einer for-Schleife benutzen:
Code: Alles auswählen
for coordinate in cords:
print(coordinate)
-
- 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 ?
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
`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]
-
- 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.
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.
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.
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()