Programm neustarten

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

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)

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

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:

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

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:

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.
Antworten