Mit Qtwebview verhindern das Text ausgewählt werden kann

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
danczi89
User
Beiträge: 10
Registriert: Dienstag 19. März 2013, 10:59

Hallo,

ich bin neu hier im Forum und Python Anfänger-Programmierer.

Ich habe folgende Frage:

Ich habe mit Python 3.3 ein kleines Programm geschrieben das eine Website in Fullscreen aufruft (hier z.b. Google)

Der Code:

Code: Alles auswählen

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

app = QApplication(sys.argv)
web = QWebView()
web.zoomFactor = 5
web.load(QUrl("http://www.google.at"))
web.showFullScreen()

sys.exit(app.exec_())

Ich will jetzt jedoch verhindern das der Text oder Bilder Markiert werden kann.
Da ich nämlich einen Touchscreen an meinen Raspberry angeschlossen habe, finde ich das dadurch die navigation extrem gestört wird.

Hat jemand einen Idee wie ich das in den Code integrieren kann?

Danke für die Hilfe,

Gruß,
Daniel
danczi89
User
Beiträge: 10
Registriert: Dienstag 19. März 2013, 10:59

Danke, das ging aber schnell (ich suche schon 2 Tage und habe nichts gefunden)

Aber wie muss der Quellcode jetzt ausschauen damit das funktioniert?
Wenn ich jezt "body { -webkit-user-select: none; }" im Quellcode einfüge kommt ein syntax error.

Code: Alles auswählen

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

app = QApplication(sys.argv)
web = QWebView()
web.zoomFactor = 5
body { -webkit-user-select: none; }
web.load(QUrl("www.google.at"))
web.showFullScreen()


sys.exit(app.exec_())

sorry das ich nerve

Gruß,
Daniel
Zuletzt geändert von danczi89 am Dienstag 19. März 2013, 14:20, insgesamt 1-mal geändert.
BlackJack

@danczi89: Das ist ja auch kein Python sondern CSS.
danczi89
User
Beiträge: 10
Registriert: Dienstag 19. März 2013, 10:59

:oops:

Stimmt, kann mann dann irgendwie anders den CSS Code in Python integerien? Ich kann das ja nicht in den Quellcode von der Website eintragen, da ich ja eine Website anzeigen will die ich ja gar nicht gebaut habe. Das ist einfach eine Website wo ein Wetter angezeit wird.

Gruß,
Daniel
BlackJack

@danczi89: Die `QWebSettings`-Klasse kennt eine Methode `setUserStyleSheetUrl()` die hier vielleicht interessant sein könnte.
danczi89
User
Beiträge: 10
Registriert: Dienstag 19. März 2013, 10:59

Ja das ist ein sehr guter Tipp. Mein Quellecode schaut jetzt so aus:

Code: Alles auswählen

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *


app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("www.wetter.at"))
web.page.settings.setUserStyleSheetUrl(QUrl::fromLocalFile("mycss.css"));
web.showFullScreen()


sys.exit(app.exec_())
ich habe in meinem Verzeichnis eine datei erstellt die "mycss.css" heißt ein den Syntax: "body { -webkit-user-select: none; }" reinkopiert.
wenn ich jetzt das programm ausführe kommt aber wieder ein syntax fehler bei Qurl::

Das habe ich von dieser seite kopiert:
http://qt-project.org/forums/viewthread/1267

aber warum funktioniert das nicht?

Danke für eure Hilfe

Gruß,
Daniel
BlackJack

@danczi89: Vielleicht magst Du mal ein Python-Tutorial durcharbeiten. In der Dokumentation ist eines. Da wirst Du feststellen dass es ``::`` in der Python-Syntax nicht gibt. Das ist C++. :-)
danczi89
User
Beiträge: 10
Registriert: Dienstag 19. März 2013, 10:59

Und wie schreibt man das in Python?

Gruß,
Daniel
danczi89
User
Beiträge: 10
Registriert: Dienstag 19. März 2013, 10:59

so schaut das zwar schon python ähnlicher aus, aber funktionieren tuts noch immer nicht :cry:

Code: Alles auswählen

web.page.settings.setUserStyleSheetUrl(QUrl.fromLocalFile("mycss.css"))
BlackJack

@danczi89: Wenn man Funktionen oder Methoden *aufrufen* will, dann muss man das auch explizit tun und nicht einfach nur das Attribut referenzieren. Aufrufen geht mit Klammern wo die Argumente drin stehen.
danczi89
User
Beiträge: 10
Registriert: Dienstag 19. März 2013, 10:59

ich schaffs nicht. :cry:

ich habe mir gerade ein python 3.3 buch gekauft.

Gruß,
Daniel
BlackJack

@danczi89: Das `page`-Attribut vom `QWebView`-Exemplar ist eine Methode. Die muss man aufrufen, dann gibt sie das `QWebPage`-Exemplar für diese Ansicht zurück. Und das `settings`-Attribut auf dem Objekt ist auch wieder eine Methode, muss also auch aufgerufen werden um das `QWebSettings`-Objekt zu bekommen.

Allerdings könnte man die Einstellungen auch direkt von `QWebView`-Exemplar bekommen, das hat nämlich auch eine `settings()`-Methode.
danczi89
User
Beiträge: 10
Registriert: Dienstag 19. März 2013, 10:59

Hallo,

das heißt dann müsste das so ausschauen:

Code: Alles auswählen

web.settings(QUrl.fromLocalFile("mycss.css"))
Richtig?

Gruß,
Daniel
danczi89
User
Beiträge: 10
Registriert: Dienstag 19. März 2013, 10:59

nein das war auch nicht richtig.
Jetzt bekomme ich einen fehler wo steht "QWebView.settings(): too many arguments

Gruß,
Daniel
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dokumentation zu lesen soll angeblich effizienter sein als Code zu raten. Nur so ein Hinweis ;-)
Das Leben ist wie ein Tennisball.
danczi89
User
Beiträge: 10
Registriert: Dienstag 19. März 2013, 10:59

Ich HABS!! :D :D :D :D :D

Danke, danke an alle!!

Code: Alles auswählen

web.settings().setUserStyleSheetUrl(QUrl.fromLocalFile("mycss.css"))
kann mein ein ziehen von bildern auch verhindern?

Gruß,
Daniel
Antworten