[Python]Gui-Position ermitteln? // Funktion aus Game ausführen?

06/29/2013 16:47 |★|554#1
Ja, Hallo, ich versuche mit derzeit verstärkt an Python und hätte da 2 kleine Probleme, habe ihn der Sufu dazu nichts gefunden, also frage ich hier.

1.: Ich habe mir ein Board erstellt und zwar "movable".
Gibt es eine Möglichkeit, die aktuelle Boardposition zu ermitteln, also die Koordinaten der linken, oberen Ecke?

2.: Gibt es eine Möglichkeit, eine in der game.py definierte Funktion aus einer anderen .py-Datei aus auszuführen?
Ich schaff's nur über nen QuestbuttonClick, welcher dann einen cmdchat sendet, so möchte ich es aber nicht lösen.
Hier im Forum wird man darauf verwiesen, die Funktion in der anderen .py-Datei nochmal neu zu schreiben, das habe ich auch versucht, allerdings muss ich dafür die interfacemodule.py laden und das führte im Endeffekt zu unschönen Bugs. (GUI schließen -> "GameWindow" ist nicht ausgewählt, heißt, ohne einen Mausklick waren keine Interaktionen möglich, Minimap wurde ausgeblendet u.A.)
Ich möchte lediglich die
PHP Code:
    def OpenWhisperDialog(self, name): 
Funktion mit einem variierenden Namen ausführen, ohne dies über ne Quest + cmdchat() oder Bugs lösen zu müssen.

Vielen Dank schonmal :)
06/29/2013 16:52 .Azazel#2
Code:
def Beispiel(self):
	import beispiel
	exec 'beispiel.Beispiel.Show()'
Bei exec:
'dateiname.Klassenname.Show()'

MfG
06/29/2013 16:56 Ʀyuzaki#3
Zu deinem Punkt zwei
PHP Code:
self.interface = interfaceModule.Interface()
self.interface.OpenWhisperDialog(name) 
Damit kannst du die Funktion OpenWhisperDialog ausführen ;)
Hier nochmal die Erklärung zum Aufbau
PHP Code:
self.variable = datei.klasse
self
.variable.function(parameter) 
Hoffe mal du verstehst den Aufbau wen nicht kannst du mich gerne Anschreiben dann erkläre ich dir das nochmal :awesome:
06/29/2013 16:59 |★|554#4
Quote:
Originally Posted by NexT³ View Post
Zu deinem Punkt zwei
PHP Code:
self.interface = interfaceModule.Interface()
self.interface.OpenWhisperDialog(name) 
Damit kannst du die Funktion OpenWhisperDialog ausführen ;)
Hier nochmal die Erklärung zum Aufbau
PHP Code:
self.variable = datei.klasse
self
.variable.function(parameter) 
Hoffe mal du verstehst den Aufbau wen nicht kannst du mich gerne Anschreiben dann erkläre ich dir das nochmal :awesome:
Ja, so hatte ich's auch gemacht, nur führte dies zu Bugs beim schließen des Boards.
Man konnte dann nämlich solange NICHTS tun, bis man einen Mausklick gesetzt hat.
Man konnte nicht laufen, keine Hotkeys verwenden, die Kamera drehen, nichts.

Bzw. reicht das, was du da geschrieben hast, noch nicht, da er erst über
PHP Code:
MakeInterfaces() 
Variablen für
PHP Code:
OpenWhisperDialog 
aufbauen muss
06/29/2013 17:39 [uLow]Beni#5
Ihr stehlt euch das alle so einfach vor...

...da in der game.py alle Funktionen in einer Klasse sind muss man zuerst die Instanze rausbekommen also auf was das self zeigt.

Das geht am leichtesten mit der OnUpdate Funktion:
Code:
from game import GameWindow
originalOnUpdateFunc = GameWindow.OnUpdate
selfOfGameWindow = None
def hijack(self):
     global selfOfGameWindow
     selfOfGameWindow=self
     GameWindow.OnUpdate = originalOnUpdateFunc

GameWindow.OnUpdate = hijack
def new_thread():
     while selfOfGameWindow is None:
          pass
     OnFinish()

def OnFinish(): # add shit here :P
     return

__import__("thread").start_new_thread(new_thread,())
Sollte vorm ingame kommen ausgeführt werden, ansonsten wirds wahrscheinlich nicht funktionieren
06/29/2013 17:49 |★|554#6
Quote:
Originally Posted by !Beni! View Post
Ihr stehlt euch das alle so einfach vor...

...da in der game.py alle Funktionen in einer Klasse sind muss man zuerst die Instanze rausbekommen also auf was das self zeigt.

Das geht am leichtesten mit der OnUpdate Funktion:
Code:
from game import GameWindow
originalOnUpdateFunc = GameWindow.OnUpdate
selfOfGameWindow = None
def hijack(self):
     global selfOfGameWindow
     selfOfGameWindow=self
     GameWindow.OnUpdate = originalOnUpdateFunc

GameWindow.OnUpdate = hijack
def new_thread():
     while selfOfGameWindow is None:
          pass
     OnFinish()

def OnFinish(): # add shit here :P
     return

__import__("thread").start_new_thread(new_thread,())
Sollte vorm ingame kommen ausgeführt werden, ansonsten wirds wahrscheinlich nicht funktionieren
Und wo sollte ich das dann einsetzen? Das GUI wird erst nach Drücken von nem Hotkey geladen, also viel zu spät ums da einzusetzen.
Und um erhlich zu sein, ganz verstehen tu ich's ned.
Wäre dir dankbar, dass ausführlich zu erklären, aber da ich noch ein Anfänger in Sachen Python bin sollte ich mich solchen Dingen vielleicht noch garnicht witmen. ^^