python Webbrowser

Du hast eine Idee für ein Projekt?
Antworten
Pasi09
User
Beiträge: 2
Registriert: Freitag 31. März 2017, 19:57

Ich will reload in einen Webbrowser einbinden bekomme aber diesen Fehler:
TypeError: reload_but() takes exactly 2 arguments (1 given)

Code: Alles auswählen

#!/usr/bin/env python

import gtk, webkit

def reload_but(self, widget):
                self.webview.reload()

def go_but(widget):
        add = addressbar.get_text()
        if add.startswith("http://") or ("https://"):
                addressbar.set_text(add)
                web.open(add)

        if not add.startswith("https://") or ("http://"):   
                add = "https://www.google.de/#q=" + add
                addressbar.set_text(add)
                web.open(add)

add = ""

win = gtk.Window()
win.connect('destroy', lambda w: gtk.main_quit())

box1 = gtk.VBox()
win.add(box1)

box2 = gtk.HBox()
box1.pack_start(box2, False)

addressbar = gtk.Entry()
box2.pack_start(addressbar)

gobutton = gtk.Button("LOS")
box2.pack_start(gobutton)
gobutton.connect('clicked', go_but)

reloadbutton = gtk.Button("<>")
box2.pack_start(reloadbutton)
reloadbutton.connect('clicked', reload_but)

scroller = gtk.ScrolledWindow()
box1.pack_start(scroller)

web = webkit.WebView()
scroller.add(web)

win.show_all()

gtk.main()
Bei Class browser: kommt dieser Fehler

Traceback (most recent call last):
File "./browser.py", line 40, in <module>
reloadbutton.connect('clicked', reload_but)
NameError: name 'reload_but' is not defined
Zuletzt geändert von Anonymous am Freitag 31. März 2017, 21:24, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Pasi09: Ich würde sagen Dir fehlen Grundlagen in objektorientierter Programmierung.

Nebenbei: Zeile 10 und 14 sind falsch weil in 10 die Bedingung *immer* wahr ist, weil eine nichtleere Zeichenkette immer wahr ist, und in 14 ist aus genau dem gleichen Grund die Bedingung *immer* unwahr. ``or`` ist kein umgangssprachliches „oder“ wo man sich die Hälfte der Bedingung dazu denken kann sondern ein binärer Operator mit einem Operanden links davon und einem Operanden rechts davon und die werden getrennt ausgewertet. Das heisst die eine Teilbedingung lautet ``add.startswith("http://")`` und die andere Teilbedingung lautet ``"https://"``, was keinen Sinn macht.

Zudem sind die Bedingungen so wie Du sie eigentlich gewollt hast in beiden ``if``-Anweisungen genau entgegengesetzt, das heisst man würde ein ``else`` statt der umgekehrten Bedingung verwenden. Und damit sind wir immer noch nicht am Ende: Beide Zweige machen am Ende genau das gleiche, das gehört also nicht doppelt in die beiden Zweige sondern dahinter. Wobei der eine Zweig dann komplett verschwindet, weil da dann gar nichts mehr gemacht wird.

`add` heisst auf deutsch „addieren“. Komischer Name für eine URL.
Pasi09
User
Beiträge: 2
Registriert: Freitag 31. März 2017, 19:57

BlackJack hat geschrieben:@Pasi09: Ich würde sagen Dir fehlen Grundlagen in objektorientierter Programmierung.

Nebenbei: Zeile 10 und 14 sind falsch weil in 10 die Bedingung *immer* wahr ist, weil eine nichtleere Zeichenkette immer wahr ist, und in 14 ist aus genau dem gleichen Grund die Bedingung *immer* unwahr. ``or`` ist kein umgangssprachliches „oder“ wo man sich die Hälfte der Bedingung dazu denken kann sondern ein binärer Operator mit einem Operanden links davon und einem Operanden rechts davon und die werden getrennt ausgewertet. Das heisst die eine Teilbedingung lautet ``add.startswith("http://")`` und die andere Teilbedingung lautet ``"https://"``, was keinen Sinn macht.

Zudem sind die Bedingungen so wie Du sie eigentlich gewollt hast in beiden ``if``-Anweisungen genau entgegengesetzt, das heisst man würde ein ``else`` statt der umgekehrten Bedingung verwenden. Und damit sind wir immer noch nicht am Ende: Beide Zweige machen am Ende genau das gleiche, das gehört also nicht doppelt in die beiden Zweige sondern dahinter. Wobei der eine Zweig dann komplett verschwindet, weil da dann gar nichts mehr gemacht wird.

`add` heisst auf deutsch „addieren“. Komischer Name für eine URL.
Alles funktioniert bis auf reload also passt alles und add nutze ich da ich es modifiziere und etwas hinzufüge.
BlackJack

@Pasi09: Nein das funktioniert nicht alles. Die ``if``-Bedingungen sind falsch. Und die Erklärung für `add` klingt nach Aprilscherz oder Du hast das irgendwo abgeschrieben und nicht kapiert das es die Abkürzung für `address` sein soll. Schönes Beispiel warum Abkürzungen keine gute Idee sind — weil man sie sehr leicht mal falsch verstehen kann.
Antworten