Programm neustarten

Plattformunabhängige GUIs mit wxWidgets.
Benutzeravatar
DHK
User
Beiträge: 26
Registriert: Sonntag 18. März 2007, 14:55
Wohnort: Bayern

Programm neustarten

Beitragvon DHK » Dienstag 27. März 2007, 17:07

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
Opera ist noch immer der beste...
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Dienstag 27. März 2007, 18:09

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.
Benutzeravatar
DHK
User
Beiträge: 26
Registriert: Sonntag 18. März 2007, 14:55
Wohnort: Bayern

Beitragvon DHK » Mittwoch 28. März 2007, 16:30

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
Opera ist noch immer der beste...
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Beitragvon name » Mittwoch 28. März 2007, 19:36

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"
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Benutzeravatar
DHK
User
Beiträge: 26
Registriert: Sonntag 18. März 2007, 14:55
Wohnort: Bayern

Beitragvon DHK » Donnerstag 29. März 2007, 12:56

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:

Code: Alles auswählen

#...
opena = 1
# ...
def OnJa(self):
        opena = 0


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
Opera ist noch immer der beste...
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Beitragvon name » Donnerstag 29. März 2007, 13:53

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
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder