Leertaste registrieren während anderer Process läuft
Verfasst: Dienstag 6. Januar 2015, 21:24
Hallo zusammen,
ich möchte folgendes erreichen: ein Hauptfenster (mit wx) mit einem Button. Klickt man darauf, soll sich ein neues Fenster öffnen und eine Funktion Background.DoSomething() gestartet werden. Während diese Funktion läuft, soll registriert werden, ob der Nutzer die Leertaste drückt und falls ja eine globale Variable confirmed = True gesetzt werden.
Im Prinzip funktioniert das Programm auch fast, aber Background.DoSomething() muss immer erst zu Ende laufen, bevor die Leertaste registriert werden kann. Außerdem reagiert das Programm nicht mehr ("Not Responding..."), bis die Funktion zu zu Ende gelaufen ist. Wie mache ich es richtig?
Besten Dank im Voraus für die Hilfe!
mintoxis
-------
Und hier mein Versuch:
ich möchte folgendes erreichen: ein Hauptfenster (mit wx) mit einem Button. Klickt man darauf, soll sich ein neues Fenster öffnen und eine Funktion Background.DoSomething() gestartet werden. Während diese Funktion läuft, soll registriert werden, ob der Nutzer die Leertaste drückt und falls ja eine globale Variable confirmed = True gesetzt werden.
Im Prinzip funktioniert das Programm auch fast, aber Background.DoSomething() muss immer erst zu Ende laufen, bevor die Leertaste registriert werden kann. Außerdem reagiert das Programm nicht mehr ("Not Responding..."), bis die Funktion zu zu Ende gelaufen ist. Wie mache ich es richtig?
Besten Dank im Voraus für die Hilfe!
mintoxis
-------
Und hier mein Versuch:
Code: Alles auswählen
import time
import wx
class Background:
def DoSomething(self):
# While background proess runs, show a small window:
gui.WhileTesting()
print "This should run in background."
time.sleep(20)
print "Background process done."
#### GUI ####
class MainFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title,size=(800,600))
self.panel = wx.Panel(self, wx.ID_ANY, style=wx.NO_BORDER)
self.panel.SetFocus()
button = wx.Button(self.panel, id=wx.ID_ANY, label="Start Test")
button.Bind(wx.EVT_BUTTON, self.onButton)
def onButton(self, event):
print "Starting background process."
myBackground = Background()
myBackground.DoSomething()
class CommunicatingFrame(wx.Frame):
__frequency = 0
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title,size=(400,200))
self.panel = wx.Panel(self, wx.ID_ANY, style=wx.NO_BORDER)
self.panel.SetFocus()
self.panel.Bind(wx.EVT_CHAR, self.OnSpace)
def OnSpace(self,event):
if(event.GetKeyCode() == wx.WXK_SPACE or event.GetKeyCode() == wx.WXK_RETURN):
self.SetTitle("Confirmed!")
confirmed = True
print confirmed
class MyApp(wx.App):
def OnInit(self):
mainframe = MainFrame(None, -1, "Example")
mainframe.Show(True)
self.SetTopWindow(mainframe)
return True
def WhileTesting(self):
testframe = CommunicatingFrame(None, -1, "Background process running, press SPACE to set the variable confirmed to 'True'...")
testframe.Show(True)
self.SetTopWindow(testframe)
return True
#### END GUI ####
# global variable
confirmed = False
gui = MyApp(0)
gui.MainLoop()