gtk /webkit window title / program close

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
rudygotya
User
Beiträge: 2
Registriert: Donnerstag 30. Dezember 2010, 14:55

Hallo zusammen,

da ich keinen freien Mysql Beautifier fand, habe ich mir die Mühe gemacht, einen Beautifier auf Javascript Basis zu schreiben. Der funktioniert auch soweit.
Das Teil habe ich anschließend in eine html Seite gepackt und per python-webkit/gtk aufgerufen.

Probleme:
  • Leider setzt er keinen Seitentitel
    Beim Resize ist er mehr als lahm
    Der thread wird nicht sauber beendet, wenn man schließt, da hilft nur control c im terminal
Hier mal ein screenshot: http://imagebin.org/130223

Hier der Code:
(Hab Archlinux am laufen, daher python2 als env)

Code: Alles auswählen

#!/usr/bin/env python2
#
# Copyright (C) 20010 by Sebastian Sauer <info@dynpages.de>
#
# MySql Beautifier is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License V3 as published by
# the Free Software Foundation;
#
# MySql Beautifier is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with MySql Beautifier;  If not, see <http://www.gnu.org/licenses/>.
#


import gtk
import webkit

class BrowserInstance:
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_title('MySQL Beautifier')
        self.window.connect('destroy', self.destroy)
        self.window.connect('delete_event', self.delete_event)

    def launch(self):
        window = gtk.Window()
        box = gtk.VBox(homogeneous=False, spacing=0)
        browser = webkit.WebView()
        window.set_default_size(800, 700)
        window.add(box)
        box.pack_start(browser, expand=True, fill=True, padding=0)
        window.show_all()
        self.window.set_border_width(10)
        browser.open('file:///home/basti/pages/mysql-beautifier/index.html')
        return browser

    def main(self):
        gtk.main()

    def delete_event(self, widget, event, data=None):
        return false

    def destroy(self, widget, data=None):
        gtk.main_quit()


if __name__ == "__main__":
    try:
        browser = BrowserInstance()
        browser.launch()
        browser.main()
        #set_title('MySQL Beautifier')
    except:
        pass
Klingt saublöd, habe mir auch einen Ast gegooglet (hatte null Vorkenntnisse in Python), leider weiss ich ab hier nicht mehr weiter. Wäre super, wenn mir jemand eine gute, verständliche Lektüre ans Herz legen könnte.

edit: Hilfe jeder Art ist nat. auch willkommen :)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

rudygotya hat geschrieben:Leider setzt er keinen Seitentitel
``gtk.Window.set_title``
Beim Resize ist er mehr als lahm
Daran kannst du glaub ich nichts ändern außer das CSS auf deiner Seite, das wohl der Grund dafür ist, dass das Resizen so lange dauert. Alternativ könntest du versuchen, während des Resizes das Neurendern der Website auszuschalten (bin mir nicht sicher, ob es da entsprechende Resize-Signale von Seite GTK gibt).
Der thread wird nicht sauber beendet, wenn man schließt, da hilft nur control c im terminal
Du meinst das Programm schließt sich nicht, wenn du das Fenster schließt? Du musst auf Destroy-Event des Fensters reagieren und da dein Programm-Beenden-Zeug machen (meistens einfach nur ``gtk.main_quit()``).
rudygotya
User
Beiträge: 2
Registriert: Donnerstag 30. Dezember 2010, 14:55

Habe noch ne Stunde lang rumprobiert, dann hab ich mich erstmal doch mit der qt-Lösung begnügt.

set_title hatte ich gefühlt in jeder sinnvollen Variante ausprobiert - wollte einfach nicht. Der handler, der den quit abfangen sollte, war meiner Meinung nach auch registriert - da habe ich wohl noch zu viel Halbwissen, von dem her genügt mir erstmal die qt- Variante. Die hat auch kein Problem mit dem Resizen des Fensters.
Muss mich wohl erstmal tiefer reinlesen, hilft so noch nix.

Danke für deine Hilfe.


grüße


Basti
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Ich glaube das Problem ist, dass du in ``launch`` ein neues Fenster erstellst, die ganzen Events aber an das aus ``__init__`` bindest...
Antworten