Seite 2 von 3

Verfasst: Sonntag 20. Januar 2008, 21:28
von schlangenbeschwörer
Hi!
Wenn du in den Weiten des Webs nichts findest, gib doch einfach mal folgendes in die Pythonshell ein:

Code: Alles auswählen

help(tk.Tk().after)
@PS: Mit Python oder allgemein? Allgemein mit einem einfachen Graphikprogramm als .gif, .png oä. abspeichern. Mit Python ähnlich mit der PIL.

Verfasst: Sonntag 20. Januar 2008, 21:40
von Saob
mit Python, und wenn ich den Code in Python Shell eingebe komm nen error

Code: Alles auswählen

IDLE 1.2.1      
>>> help(tk.Tk().after)

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    help(tk.Tk().after)
NameError: name 'tk' is not defined
>>> 

Verfasst: Sonntag 20. Januar 2008, 21:42
von Leonidas
Du musst Tkinter schon importieren, sonst wird das natürlich nix:

Code: Alles auswählen

import Tkinter as tk
Bist du sicher, dass du nicht erstmal ein Tutorial durchlesen willst?

Verfasst: Sonntag 20. Januar 2008, 21:48
von Saob
also da kommt raus "after(self, ms, func=None, *args)"
sieht das ganze nun so aus?

Code: Alles auswählen

            MainWindow.after(20000, func=new_watch)
            MainWindow.after(30000, func=new_specialdonut)
weil so passiert nichts

Verfasst: Montag 21. Januar 2008, 06:27
von arris
Saob hat geschrieben:

Code: Alles auswählen

            MainWindow.after(20000, func=new_watch)
            MainWindow.after(30000, func=new_specialdonut)
Fast richtig. Das "func=" ist zuviel. Die Signatur der Funktion (...ms, func = None...) sagt Dir nur, dass, wenn keine Funktion angegeben wird, der Parameter mit None belegt wird. Hast Du eine Funktion, gib sie einfach an, ohne das "func = "

Verfasst: Montag 21. Januar 2008, 20:22
von Saob
ok funktioniert nun, danke :)
letzte sache, dann wären alle threads raus und somit der Single Player fertig (denke gerade über 2-Spieler modus):
habe einen Countdown, damit das spiel nicht unendlich lang geht, dieser beträgt zum anfang 90 Sekunden. wenn man aber uhren einsammelt kriegt man 10 sekunden drauf. momentan läuft das so in einem thread, wegen dem time.sleep(1)... :

Code: Alles auswählen

def countdown(count):
    global Secondsremaining, GameStarted, Speed
        
    while GameStarted == 1 and Secondsremaining > 0:
        time.sleep(1)
        Secondsremaining=Secondsremaining - 1
        TimeLabel["text"]="Time remaining: \n" + str(Secondsremaining) + " Seconds"        
        if Secondsremaining == 0:            
            game_over()
und die addierung der 10 sekunden:

Code: Alles auswählen

    elif MarioY == WatchY and MarioX == WatchX:
        Score=Score + 500
        Secondsremaining=Secondsremaining + 10
        TotalTime=TotalTime + 10
        WatchCount=WatchCount + 1
        WatchesCountLabel["text"]="x " + str(WatchCount)
        MainWindow.after(20000, new_watch)
ist sehr primitiv mit ner while schleife gelöst, habe aber ja auch erst seit nem halben jahr informatik unterricht. ich nehme aber an, dafür giebt es sowas wie Timer-Objekte, oder?
wenn nicht, wie könnt ich das lösen mit time.sleep(1) weg und thread raus

Verfasst: Montag 21. Januar 2008, 21:00
von Saob
Ok, hab es geschafft dies zu lösen, nur krieg ich noch so nen error, den ich öfters habe wenn ich objekte rumschieben per move:
File "O:\GameCanvasAlt(FastFertig)\Kopie von DunkinDonutsFreak.py", line 387, in move_ghost
move_ghost()
File "O:\GameCanvasAlt(FastFertig)\Kopie von DunkinDonutsFreak.py", line 408, in move_ghost
way6_forwards()
File "O:\GameCanvasAlt(FastFertig)\Kopie von DunkinDonutsFreak.py", line 330, in way6_forwards
move_left(), move_left(), move_up(), move_left(), move_left(), move_left(), move_up(), move_up(), move_up(), move_up()
File "O:\GameCanvasAlt(FastFertig)\Kopie von DunkinDonutsFreak.py", line 269, in move_left
Field.move(Ghost, -1, 0)
File "D:\Python\lib\lib-tk\Tkinter.py", line 2256, in move
self.tk.call((self._w, 'move') + args)
TclError: invalid command name ".23710016.23710456"
verstehe da den fehler net?

Edit: passiert auch nur wenn ich das spiel während die runde läuft beende

Verfasst: Montag 21. Januar 2008, 22:40
von Leonidas
arris hat geschrieben:
Saob hat geschrieben:

Code: Alles auswählen

            MainWindow.after(20000, func=new_watch)
            MainWindow.after(30000, func=new_specialdonut)
Fast richtig. Das "func=" ist zuviel. Die Signatur der Funktion (...ms, func = None...) sagt Dir nur, dass, wenn keine Funktion angegeben wird, der Parameter mit None belegt wird. Hast Du eine Funktion, gib sie einfach an, ohne das "func = "
Sollte keinen Unterschied machen, da man Funktionen so immer mit Keywort-Argumenten aufrufen kann.

Verfasst: Dienstag 22. Januar 2008, 14:17
von Saob
also gestern ging alles, habs heute in der schule nochmal zocken wollen und sah das der countdown nicht mehr runtertickte, garkeine special donuts und watches mehr spawnen. also das mit dem .after funzt irgendwie nichtmehr?
sieht so aus:

Code: Alles auswählen

    elif event.keysym == "g":
        Field.delete(Info1, Info2, Info3, Info4, Info5, Info6, Info7, Info8, Info9, Info10, Info11, Info12, Info13, Info14, Info15)
        if GameStarted == 0:
            GameStarted=1
            new_donut()
            ghost()
            MainWindow.after(1000, countdown)            
            MainWindow.after(20000, new_watch)
            MainWindow.after(30000, new_specialdonut)

Verfasst: Samstag 2. Februar 2008, 00:54
von Saob
keiner ne idee? :?: :(

naja ansonsten hät ich da noch ne frage. wie kann man mit Python (oder ist es überhaupt möglich, ich denke aber mal schon) klicks etc durch ein netztwerk zu schicken? z.B. das man von einem anderen rechner im netztwerk auf die mainloop() zugreifen kann, und z.B. eine 2te figur steuern kann oder ähnliches. würde mich sehr interessieren ;)

Verfasst: Samstag 2. Februar 2008, 09:06
von Leonidas
Du suchst glaube ich so etwas wie Remote Procedure Calls - RPC. Guck dir mal XML-RPC an.

Verfasst: Samstag 2. Februar 2008, 14:15
von Saob
hab ma bissl gegoogelt, sehe aber das XML-RPC dings bezieht sich wohl sehr stark fürs arbeiten übers Internet?
was ich halt machen will, ist ein Server, auf dem die variablen gespeichert sind, und sich vom client verändern lassen übers LAN
z.B.:
Server:
PlayerAGold=1000
Client:
PlayerAGold=PlayerAGold + 100

das also auf die variablen zugegriffen werden kann, welche sich auf dem anderen PC befinden

Verfasst: Samstag 2. Februar 2008, 14:31
von Leonidas
Ob Internet oder LAN, beide nutzten TCP, von daher lässt sich auch XML-RPC dort einsetzen.

Verfasst: Samstag 2. Februar 2008, 14:43
von Saob
na wenn das so ist, dann immer her damit :) finde nur leider keine nützlichen Tutorials, nur seiten wo erklärt wird was man damit erreichen kann und ähnliches. so in der art Snkale Wrangling for Kids wäre perfekt wenn sowas existiert :?:

Verfasst: Samstag 2. Februar 2008, 14:57
von Leonidas
Schon mal die Suchfunktion ausprobiert?

Verfasst: Samstag 2. Februar 2008, 16:27
von Saob
habe ich, finde ja nur leider nichts wie oben schon gesagt :(

Verfasst: Samstag 2. Februar 2008, 16:58
von Leonidas
Dann schau mal hier.

Verfasst: Samstag 2. Februar 2008, 17:47
von Saob
also hab mal nach dem example den server gemacht, geht aber bei mir nicht :?:

Code: Alles auswählen

Traceback (most recent call last):
  File "O:/PyOGame(todo)/Client.py", line 4, in <module>
    print s.pow(2,3)  # Returns 2**3 = 8
  File "D:\Python25\lib\xmlrpclib.py", line 1147, in __call__
    return self.__send(self.__name, args)
  File "D:\Python25\lib\xmlrpclib.py", line 1437, in __request
    verbose=self.__verbose
  File "D:\Python25\lib\xmlrpclib.py", line 1185, in request
    errcode, errmsg, headers = h.getreply()
  File "D:\Python25\lib\httplib.py", line 1195, in getreply
    response = self._conn.getresponse()
  File "D:\Python25\lib\httplib.py", line 924, in getresponse
    response.begin()
  File "D:\Python25\lib\httplib.py", line 385, in begin
    version, status, reason = self._read_status()
  File "D:\Python25\lib\httplib.py", line 343, in _read_status
    line = self.fp.readline()
  File "D:\Python25\lib\socket.py", line 331, in readline
    data = recv(1)
error: (10054, 'Connection reset by peer')

Verfasst: Samstag 2. Februar 2008, 18:49
von BlackJack
Firewall!?

Verfasst: Samstag 2. Februar 2008, 19:56
von Saob
ist aus :?