Link in MessageDialog?

Plattformunabhängige GUIs mit wxWidgets.
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

Hello again :)

Also ich habs nun soweit hinbekommen, dass ich ein wx.Dialog - Fenster erstellt habe und darin Links enthalten sind. Nun möchte ich aber, dass wenn man auf einen Link klickt, nicht der Browser mit einer URL geöffnet wird, sondern ein normales wx.MessageDialog inklusive ein paar Anzeigedaten.....

geht das irgendwie?

Gruß

*EDIT*
Also quasi einfach eine Funktion aufrufen, wenn man auf einen Link klickt. Innerhalb dieser Funktion kann ja dann der Code für den MessageDialog sein. Direkt als URL einen Funktionsnamen angeben hat net wirklich funktioniert :(
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

blubber hat geschrieben:Nun möchte ich aber, dass wenn man auf einen Link klickt, nicht der Browser mit einer URL geöffnet wird, sondern ein normales wx.MessageDialog
Hallo blubber!

Schau dir doch die Demo des "HyperLinkCtrl" noch einmal an. Dort wird gezeigt, wie du beim Klick auf den Hyperlink einen Eventhandler aufrufen kannst.

Ungefiltert aus der Demo kopiert:

Code: Alles auswählen

        # Intense link examples..
        self._hyper3 = hl.HyperLinkCtrl(self, wx.ID_ANY, "wxPython Mail Archive",
                                        URL="http://lists.wxwidgets.org/")
        sizer.Add(self._hyper3, 0, wx.ALL, 10)
        self._hyper3.Bind(hl.EVT_HYPERLINK_RIGHT, self.OnRightLink)
        
        self._hyper3.SetLinkCursor(wx.CURSOR_QUESTION_ARROW)
        self._hyper3.SetColours("DARK GREEN", "RED", "NAVY")
        self._hyper3.SetUnderlines(False, False, False)
        self._hyper3.EnableRollover(True)
        self._hyper3.SetBold(True)
        self._hyper3.DoPopup(False)
        self._hyper3.UpdateLink()


        self._hyper4 = hl.HyperLinkCtrl(self, wx.ID_ANY,
                                        "Open Google In Current Browser Window?",
                                        URL="http://www.google.com")
        sizer.Add(self._hyper4, 0, wx.ALL, 10)
        self._hyper4.Bind(hl.EVT_HYPERLINK_LEFT, self.OnLink)
        self._hyper4.SetToolTip(wx.ToolTip("Click link for yes, no, cancel dialog"))
        self._hyper4.AutoBrowse(False)


        


    def OnLink(self, event):
        # Goto URL, demonstrates attempt to open link in current window:
        strs = "Open Google In Current Browser Window "
        strs = strs + "(NO Opens Google In Another Browser Window)?"
        nResult = wx.MessageBox(strs, "HyperLinkCtrl", wx.YES_NO |
                                wx.CANCEL | wx.ICON_QUESTION, self)

        if nResult == wx.YES:
            self._hyper4.GotoURL("http://www.google.com", True, True)
        elif nResult == wx.NO:
            self._hyper4.GotoURL("http://www.google.com", True, False)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

Danke :oops:
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

kann man eigentlich einem Event einen Parameter übergeben ?
Also wenn man das Beispiel der Demo her nimmt:

Code: Alles auswählen

self._hyper4.Bind(hl.EVT_HYPERLINK_LEFT, self.OnLink(uebergabe)) 
Dass hier an die Funktion self.OnLink der Parameter "uebergabe" übergeben wird !?

wenn ich

Code: Alles auswählen

def OnLink(self, event, uebergabe)
oder sowas mache, dann heisst es immer, dass 3 Variable empfangen aber nur 2 übergeben werden !?

Gruß
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

blubber hat geschrieben:kann man eigentlich einem Event einen Parameter übergeben?
Hallo blubber!

z.B. mit lambda:

Code: Alles auswählen

self._hyper4.Bind(hl.EVT_HYPERLINK_LEFT, lambda event: self.OnLink(event, uebergabe))

Code: Alles auswählen

def OnLink(self, event, uebergabe = None)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

Ok, vielen Dank.
Ein letztes Problem ist nun, dass ich in einer For - Schleife meine Links erzeugen lasse und aus einer Liste heraus die Werte für "uebergabe" hole. Also die Variable "uebergabe" hat jedes mal einen anderen Wert. Nun ist es so, dass bei mir jeder Link den gleichen Wert für "uebergabe" erhält, nämlich das letzte Element der Liste...
Gibts hierfür noch eine Möglichkeit? Dann würd ich auch aufhören zu nerven :roll:
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

also so:

Code: Alles auswählen

for uebergabe in liste:
...
     self.testlink.Bind(hl.EVT_HYPERLINK_LEFT, lambda event: self.OnLink(event, uebergabe))
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

Habs hinbekommen.

Vielen Dank für die Hilfe Gerold.

Gruß
Antworten