Aus GUI heraus eine html-Datei mit Sprungmarke öffnen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
BW
User
Beiträge: 25
Registriert: Dienstag 20. März 2007, 10:25

Mittwoch 19. September 2007, 10:49

Ein sonniges hallo in die Runde,

ich komme irgendwie nicht weiter, obwohl ich schon das Forum durchstöbert und im Internet gesucht habe.

Ich habe mit wx.Python ein GUI "gebastelt" und dort gibt es einen Bitmapbutton mit einem Fragezeichen. Wenn jetzt auf diesen Button gedrückt wird, dann soll eine schon fertige Onlinehilfe sich in einem Browser öffnen.

Das habe ich sowohl mit

Code: Alles auswählen

import os
os.startfile(path)
als auch mit

Code: Alles auswählen

import webbrowser
browser = webbrowser.get()        
browser.open_new(path)
hinbekommen. Dabei ist path z.B. C:\Programme\XX\Beschreibung\index.htm.

Jetzt gibt es aber an einigen Stellen Sprungmarken wo dann path so aussieht: C:\Programme\XX\Beschreibung\index.htm#Vorgehen

Und genau da liegt das Problem. Wenn ich versuche diesen path zu übergeben, dann erhalte ich die Fehlermeldung, dass die angegebene Datei nicht gefunden werden kann. Das ist ja auch korrekt so und kann ich nachvollziehen.
Aber wie bekomme ich es hin, dass die Datei geöffnet wird und dann direkt die Sprungmarke angezeigt wird?

Ich muss dazu sagen, dass meine html-Kenntnisse jetzt nicht so wahnsinnig groß sind und dass am Ende das GUI sowohl unter Windows als auch unter Linux laufen sollte.
Muss ich an dieser Stelle dann noch etwas beachten?

Vielleicht könnt ihr mir ja einen kleinen Tipp geben, wo ich noch suchen kann oder es kann mir einer sagen, dass das mit der Sprungmarke gar nicht geht.

viele Grüße und Dank im voraus
Barbara
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mittwoch 19. September 2007, 12:18

BW
User
Beiträge: 25
Registriert: Dienstag 20. März 2007, 10:25

Mittwoch 19. September 2007, 15:11

Hallo HWK,

leider hilft mir das grad noch nicht so wirklich weiter...aber dennoch danke für deine Mühe.
Zwar stimmt das Prinzip mit meiner Frage in gewisser Weise überein, aber leider kann ich nicht finden, wie das denn umgesetzt ist. In dem Seitenquelltext finde ich keinen Hinweis, wie das denn umgesetzt ist bzw. funktioniert. :roll:

Vielleicht ist das in meinem ersten Eintrag nicht so deutlich geworden, aber ich möchte aus einer py Datei heraus den Browser öffnen und die url anzeigen lassen und das eben genau an der vorgegebenen Sprungmarke.

Was ich in der Zwischenzeit heraus gefunden habe ist: Also ich bin weiterhin auf der Suche nach einer Lösung...
Barbara
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mittwoch 19. September 2007, 15:16

Statt startfile kannst du wx.LaunchDefaultBrowser(...) nehmen. Wenn du unter Linux die Environment-Variable $BROWSER gesetzt hast, geht es auch dort.

EDIT: Ob das mit anchors umgehen kann, habe ich nicht probiert. Eventuell haengt das auch vom aufgerufenen Browser ab?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
BW
User
Beiträge: 25
Registriert: Dienstag 20. März 2007, 10:25

Mittwoch 19. September 2007, 15:58

Hallo Rebecca,
ich kann das hier zwar gerade nur unter Windows ausprobieren, aber auch hier kann ich nur die htm-Datei ohne Angabe der Sprungmarke angeben, damit ich keine Fehlermeldung bekomme und sich der Browser mit der Datei öffnet. Und das unabhängig davon ob der IE oder Firefox als Standardbrowser eingestellt ist.

Vielleicht liegt das auch einfach daran, dass die Funktionen/Methoden, die ich bis jetzt versucht habe, vom Prinzip her so funktionieren, als ob man unter Windows einen Doppelklick auf die htm-Datei macht. Und ich deshalb einfach eine Lösung finden muss, wie ich die Datei mit einem bestimmten Programm mit der Übergabe von Parametern/Argumenten (hier halt Sprungmarke) starten kann.
Oder ist das jetzt ein total abwegiger Gedanke?

Barbara
BlackJack

Mittwoch 19. September 2007, 16:49

Nur so geraten, aber hast Du's schonmal mit einer URL versucht, also:

file://c|/pfad/zur/datei.html#anker

Oder so ähnlich, ich weiss nicht mehr so richtig ob bei Windows der Lauferksbuchstabe so in eine URL umgesetzt wird.
BW
User
Beiträge: 25
Registriert: Dienstag 20. März 2007, 10:25

Donnerstag 20. September 2007, 06:55

Moin moin, neuer Tag, neues Glück...
also was ich bis jetzt unter Windows sehe, ist dass Firefox die URL in der Form file:///C:/usw. benötigt und der Internet Explorer nur C:/usw.
mit

Code: Alles auswählen

path = "C:\\Programme\\XX\\Beschreibung\\index.htm"
browser = webbrowser.get()
browser.open_new(path)
wird ggf. beim Firefox das file:\\\ automatisch und richtig hinzugefügt.
D.h. der Browser öffnet sich so wie er es soll, aber sobald ich den Anker/die Sprungmarke an path anhänge geht es nicht mehr.

BlackJack, habe ich damit deinen Hinweis richtig verstanden?

Es gibt auch nicht die Möglichkeit sozusagen anschließend den Anker aufzurufen, oder?

Barbara
BW
User
Beiträge: 25
Registriert: Dienstag 20. März 2007, 10:25

Donnerstag 20. September 2007, 08:25

Hallo BlackJack,

ich glaube ich habe gerade gefunden, was du eigentlich gemeint hast.
Ich übergebe dem webbrowser eine Datei und gar keine URL.
Aber wenn ich aus der Datei mit

Code: Alles auswählen

import urllib
path = "C:\\Programme\\XX\\Beschreibung\\index.htm"
path= urllib.pathname2url(path)
browser.open(path) 
eine URL mache, funktioniert das überhaupt nicht. Denn ich bekomme, egal ob mit oder ohne Angabe des Ankers, die Meldung, dass die Datei nicht gefunden wird. (Ich habe aber definitiv den richtigen Pfad angegeben, nur um diese Fehlerquelle mal auszuschließen.)

Ich such und probiere dann mal weiter ... :D

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

Donnerstag 20. September 2007, 09:07

Hallo Barbara!

Ich hab's... :D

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import urllib
import webbrowser
import os

import subprocess

pfad = r"J:\Dokumente und Einstellungen\Gerold\Desktop\1_index.html"
lw, pfad = os.path.splitdrive(pfad)

u = urllib.pathname2url(pfad)
print u

uu = '"' + "file:///" + lw + u + "#top" + '"'
print uu

#os.startfile(uu) # funktioniert

webbrowser.open(uu) # funktioniert
...mit ein wenig testen. :roll:

Der Code sieht nur deshalb so zerfranzt aus, weil ich getestet habe. Mein normaler Quellcode sieht natürlich nicht so aus. ;-)

>> Es genügt, wenn man zusätzlich je ein doppeltes Anführungszeichen vor und hinter den URL stellt. <<

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Donnerstag 20. September 2007, 09:17

Wenn ich firefox unter Linux aus der Shell so aufrufe:

Code: Alles auswählen

firefox file:///home/rbreu/test.html#a4
funktioniert es. Jetzt wollte ich das auch mal mit LaunchDefaultBrowser ausprobieren und habe folgendes Problem:

Code: Alles auswählen

>>> os.environ["BROWSER"]
'firefox'
>>> wx.LaunchDefaultBrowser("file:///home/rbreu/test.html#a4")
execvp(epiphany, http://file:///home/rbreu/test.html#a4) failed with error 2!
True
Keine Ahnung, warum er jetzt epiphany starten will, das habe ich nicht installiert... Kann natuerlich nicht gehen. Das hat mal funktioniert, dass er firefox startet, ich glaub das war noch auf meiner alten Suse-Installation. Mmh, was hat sich nun geandert?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Donnerstag 20. September 2007, 09:57

Der Internet-Explorer ist doof.

Wenn ich in der Adress-Zeile oben eingebe:

Code: Alles auswählen

file:///C:/Dokumente%20und%20Einstellungen/breu/Eigene%20Dateien/test.html#a4
tut er das gewuenschte. Wenn ich genau das in der Kommandozeile mache:

Code: Alles auswählen

iexplore.exe "file:///C:/Dokumente%20und%20Einstellungen/breu/Eigene%20Dateien/test.html#a4"
oeffnet er zwar die Datei, ignoriert aber den anchor, und in der Adress-Zeile steht dann

Code: Alles auswählen

C:\Dokumente und Einstellungen\breu\Eigene Dateien\test.html
Da kann man das mit dem anchor ja vergessen und am besten alles in eigene Dateien packen. BW, wenn du nur eine sehr einfache html-Seite hast, koenntst du noch mal das html-Fenster von wx ausprobieren.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
BW
User
Beiträge: 25
Registriert: Dienstag 20. März 2007, 10:25

Donnerstag 20. September 2007, 10:06

Hallo Gerold,

ich bin absolut begeistert und sage gaaaaaanz vielen Dank, denn ich war kurz davor zu sagen, das geht einfach nicht.

Ich habe noch drei Anmerkungen bzw. Fragen.
Warum hast du subprocess importiert? Das wird doch gar nicht verwendet, funktioniert also auch ohne.

Ich habe noch webbrowser.get() eingefügt, dann startet der Standardbrowser, denke ich zumindest. Mit dem IE und Firefox habe ich das ausprobiert.

Da anscheinend der webbrowser zumindest unter Windows intern os.startfile ausführt, muss wenn das funktioniert auch der webbrowser gehen.

hier mal der "aufgeräumtere" Code:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import os
import urllib
import webbrowser

pfad = r"J:\Dokumente und Einstellungen\Gerold\Desktop\1_index.html"    
        
lw, pfad = os.path.splitdrive(pfad)
u = urllib.pathname2url(pfad)
uu = '"' + "file:///" + lw + u + "#top" + '"'

browser = webbrowser.get()
browser.open(uu) 
also noch einmal vielen Dank für die Hilfe :D

viele Grüße Barbara
BW
User
Beiträge: 25
Registriert: Dienstag 20. März 2007, 10:25

Donnerstag 20. September 2007, 10:19

Hallo Rebecca,

also bei mir klappt das mit dem IE und der Komandozeile und Angabe eines Ankers, wenn ich noch in der Komandozeile angebe wo sich denn die iexplorer.exe befindet.

Ich versuche jetzt ersteinmal mit der Lösung von Gerold zu arbeiten, in der Hoffnung, dass diese jetzt nicht so schnell wieder Ärger verursacht.

viele Grüße
Barbara
Antworten