2016-04-06 7 views
1

Ich habe WxPython GUI-Programm, das eine Eingabe vom Benutzer zur Ausführung erhalten muss. Ich möchte den Dialog vor dem Hauptrahmen anzeigen, die Eingabe speichern, den Dialog schließen und dann das Hauptprogramm ausführen. Im Moment benutze ich stattdessen raw_input. Dies ist mein Code:Holen Sie sich Benutzereingaben aus einem Dialogfeld vor dem Anzeigen des Mainframes

import wx 
import wx.lib.iewin as iewin 
import subprocess 

class MyBrowser(wx.Frame): 
    def __init__(self, parent, id): 
    wx.Frame.__init__(self, parent, id, 
         style=wx.DEFAULT_FRAME_STYLE | wx.STAY_ON_TOP) 
    self.transparency = 255 

    sizer = wx.BoxSizer(wx.VERTICAL) 
    self.browser = iewin.IEHtmlWindow(self) 
    sizer.Add(self.browser, 1, wx.EXPAND, 10) 

    self.Bind(wx.EVT_CHAR_HOOK, self.onKey) 

    def SetTransparent(self, value): 
    self.transparency = value 
    wx.Frame.SetTransparent(self, value) 

    def GetTransparent(self): 
    return self.transparency 

    def decreaseTransparency(self, e): 
    self.SetTransparent(self.GetTransparent() - 10) 
    def increaseTransparency(self, e): 
    self.SetTransparent(self.GetTransparent() + 10) 


    def onKey(self, evt): 
    if evt.GetKeyCode() == wx.WXK_DOWN: 
     self.decreaseTransparency(self) 
    elif evt.GetKeyCode() == wx.WXK_UP: 
     self.increaseTransparency(self) 
    else: 
     evt.Skip()  

    def load(self,uri): 
    self.browser.Navigate(uri) 

#starts livestreamer process 
response = raw_input("Livestreamers name:\n") 
livestreamer = "livestreamer twitch.tv/" 
host = subprocess.Popen(['livestreamer', 'twitch.tv/'+response, 'best'], stdout=subprocess.PIPE) 

if __name__ == '__main__': 
app = wx.App() 
dialog = MyBrowser(None, -1) 
dialog.browser.Navigate("https://www.twitch.tv/" + response+ "/chat?popout=") 
dialog.Show() 
app.MainLoop() 
host.communicate()[0] 

Dies ist, was ich im Sinn haben: dialog example

Antwort

1

In Ihrem Browser erstellen init ein Dialogfeld, führen ShowModal auf, und erhalten dann die Eingabe mit dialog.GetValue

class MyBrowser(wx.Frame): 
    def __init__(self, parent, id): 
     wx.Frame.__init__(self, parent, id, 
        style=wx.DEFAULT_FRAME_STYLE | wx.STAY_ON_TOP) 
     self.transparency = 255 
     self.dialog = wx.TextEntryDialog(None, message="Enter stuff") 
     self.dialog.ShowModal() 
     print self.dialog.GetValue() 
     self.Bind(wx.EVT_CHAR_HOOK, self.onKey) 

Offensichtlich ersetzen Sie es durch den Druck, was Sie mit dem Wert tun wollen

Wenn Sie es nach zugreifen möchten in stantiation des MyBrowser-Objekts, weisen Sie es als Instanzvariable zu, anstatt es zu drucken.

class MyBrowser(wx.Frame): 
    def __init__(self, parent, id): 
     wx.Frame.__init__(self, parent, id, 
        style=wx.DEFAULT_FRAME_STYLE | wx.STAY_ON_TOP) 
     self.transparency = 255 
     self.dialog = wx.TextEntryDialog(None, message="Enter stuff") 
     self.dialog.ShowModal() 
     self.dlg_val = self.dialog.GetValue() 
     self.Bind(wx.EVT_CHAR_HOOK, self.onKey) 

es dann weiter verwenden unten

if __name__ == "__main__": 
    dialog = MyBrowser(None) 
    print dialog.dlg_val 
+0

Es tut mir leid für meine Unwissenheit, aber wie rufe ich self.dialog.GetValue() von außerhalb dieser Klasse? Das ist eine großartige Antwort, aber ich kann es nicht integrieren. – stanbsl

+0

bearbeitet meine Antwort, um Ihnen zu zeigen, wie man es außerhalb der Klasse verwendet – BretD

+0

Danke, Alter, es hat perfekt funktioniert! – stanbsl

Verwandte Themen