Seite 1 von 1
Programm neustarten
Verfasst: Dienstag 27. März 2007, 17:07
von DHK
Hi,
ist es mit wxPython möglich, ein Programm neustarten zu lassen? Z. B. Ein Dialogfeld fragt den Anwender, ob er das Programm neustarten möchte. Der Anwender klickt auf "Ja". Nun soll das Programm beendet werden und wieder neu geöffnet werden. Ist so etwas möglich? Wenn ja, wie?
Gruß
DHK
Verfasst: Dienstag 27. März 2007, 18:09
von DatenMetzgerX
das würde ich mit einem 2ten python script lösen. Die Anwendung ruft das python script auf und beendet sich selbst. Das script schaut immer, ob die Anwendung noch geöffnet ist, wenn dies nicht mehr der Fall ist startet es die Anwendung.
Verfasst: Mittwoch 28. März 2007, 16:30
von DHK
Hallo, vielen Dank für deinen Tipp. Ich habe noch eine Frage. Habe folgenden Code:
Code: Alles auswählen
# .....
def OnChooseSkin(self, event):
inuse = file('skindata/inuse.txt', 'w')
inuse.write(string.lower(selected))
inuse.close()
dlg = wx.MessageDialog(self, dialog['skinchosen'], dialog['skinchosentitle'], wx.YES | wx.NO)
self.Bind(wx.EVT_BUTTON, self.OnJa, id=wx.ID_YES)
dlg.ShowModal()
dlg.Destroy()
def OnJa(self, event):
print "Hello"
Problem: Die Funktion OnJa() wird nicht aufgerufen. Wenn ich auf den Ja-Button drücke, müsste normalerweise "Hello" ausgegeben werden. Wird es aber nicht. Was habe ich falsch gemacht?
Gruß
DHK
Verfasst: Mittwoch 28. März 2007, 19:36
von name
Machs doch einfach mit:
Code: Alles auswählen
...
dlg = wx.MessageDialog(self, dialog['skinchosen'], dialog['skinchosentitle'], wx.YES | wx.NO)
dlg_value = dlg.ShowModal()
if dlg_value == wx.ID_YES:
print "Hello"
...
beziehungsweise:
Code: Alles auswählen
...
dlg = wx.MessageDialog(self, dialog['skinchosen'], dialog['skinchosentitle'], wx.YES | wx.NO)
dlg_value = dlg.ShowModal()
if dlg_value == wx.ID_YES:
self.OnJa()
...
def OnJa(self):
print "Hello"
Verfasst: Donnerstag 29. März 2007, 12:56
von DHK
Danke, name. Hast mir sehr geholfen.
DatenMetzgerX hat geschrieben:das würde ich mit einem 2ten python script lösen. Die Anwendung ruft das python script auf und beendet sich selbst. Das script schaut immer, ob die Anwendung noch geöffnet ist, wenn dies nicht mehr der Fall ist startet es die Anwendung.
Hallo! Wie mache ich denn das? Bisher mache ich das so (es klappt aber nicht):
Hauptskript:
Zweites Skript:
Code: Alles auswählen
#!/usr/bin/env python(w)
# -*- coding: iso-8859-1 -*-
import helloworld
while True:
if helloworld.opena == 0:
print helloworld.opena
break
Leider funktioniert das nicht. Hat jemand eine andere Lösung des Problems für mich?
Gruß
DHK
Verfasst: Donnerstag 29. März 2007, 13:53
von name
So wird das nuex

Das liesse sich entweder ueber sockets mit dem loopback device, oder aber, ueber ein file loesen, wo einer reinschreibt und der andere liest.
Ich faende sockets schoener
Code: Alles auswählen
"""
Client
"""
class mysocket:
def __init__(self, sock=None):
if sock is None:
self.sock = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
else:
self.sock = sock
def connect(self,host, port):
"""
Connects to host
"""
self.sock.connect((host, port))
def send(self,msg):
"""
Sends msg to the server
"""
sent = self.sock.send(msg+"\0")
def receive(self):
"""
Returns content sent by server
"""
end = ''
while 1:
chuck= self.sock.recv(1)
if(chuck != "\0"):
end += chuck
else:
break
return end
Code: Alles auswählen
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import time
import sys
"""
This module defines the server
"""
class Channel:
"""
This class defines one single player that's connected
"""
def __init__(self,channel,details):
self.channel = channel
self.details = details
self.done = False
def send(self,msg):
"""
Sends msg to the client
"""
sent = self.channel.send(msg+"\0")
def handleReceive(self):
"""
Handles the received content
"""
receive = self.receive()
if receive == "RESTART":
self.done = True
print "Restart"
#Start the other python script
if receive == "END":
sys.exit(0)
def receive(self):
"""
Returns content sent by client
"""
end = ''
while 1:
chunk= self.channel.recv(1)
if(chunk != "\0"):
end += chunk
else:
break
if end != '':
return end
def mainLoop(self):
while 1:
self.handleReceive()
if self.done:
return True
time.sleep(0.1)
class Main:
def __init__(self,port):
i = 0
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind(("", port))
self.sock.listen( 1 )
i = 0
while 1:
self.listen()
def listen(self):
channel, details = self.sock.accept()
client = Channel(channel, details)
client.mainLoop()
port = 92525
if __name__ == "__main__":
main = Main(port)
>>> sock = mysocket()
>>> sock.connect("127.0.0.1", 92525)
>>> sock.send("RESTART")
>>> sock = mysocket()
>>> sock.connect("127.0.0.1", 92525)
>>> sock.send("RESTART")
Und der server sagt dann:
Restart
Restart
Das ganze ist aus einem pyGame Netzwerkspielchen von mir(etwas abgeaendert), deshalb die kommentare
Hoffe ich konnte helfen