Dialoge schließen sich erst beim zweiten Mal

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Funktioniert das eigentlich?

Code: Alles auswählen

import pygtk
pygtk.require('2.0')
import gtk

def a(widget):
    dlg.destroy()

dlg = gtk.Dialog("hallo")
label = gtk.Label("hii")
dlg.vbox.pack_start(label)
button = gtk.Button(stock=gtk.STOCK_OK)
button.connect("clicked", a)
dlg.action_area.add(button)
dlg.show_all()
dlg.run()
Gruß, mawe
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nun, ich habe jetzt eigentlich auch keine Ideen mehr:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import pygtk
pygtk.require("2.0")
import gtk

def slg():
    print 'called slg'
    dlg = gtk.Dialog("rock mich", None, 0,
            (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
    print 'created dlg'
    dlg.connect("delete_event", delete_event)
    chosen = dlg.run()
    print 'run dlg'
    dlg.destroy()
    dlg.hide()
    print 'destroyed dlg'
    return chosen

def delete_event(dialog, event):
    dialog.hide()

response = slg()
print 'left slg'
print response == gtk.RESPONSE_CLOSE
Habe noch das delete_event eingebaut. Aber ich kann halt dein Problem bei mir aus irgendwelchen Gründen nicht nachvollziehen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

Und wieder nicht.
Aber ich danke die für deine Mühe.
Ich glaub wir haben beide das gleiche Problem:
Wir sehen "perfekten" Code aber hier bei mir will er einfach nicht.

Vll. fällt Dookie ja noch was auf.
--
Aber noch eine Frage zum gtk.Window.
Was sind denn die richitgen "Close"-Funktionen. Bisher habe ich das immer so:

Code: Alles auswählen

import pygtk; pygtk.require("2.0")
import gtk
class Fenster:
  def __init__(self):
    self.__window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    #bitte jetzt die richtigen Varianten zeigen
    self.__window.connect("destroy", lambda widget: gtk.main_quit())
    self.__window.connect("delete_event", lambda widget,event:gtk.main_quit())
   #delete_event sollte doch eigentlich "False" zurückgeben, oder?

    self.__btn_quit = gtk.Button(stock=gtk.STOCK_CLOSE)
    self.__btn_quit.connect("clicked", self.__click)
    self.__window.add(self.__btn_quit)
    self.__btn_quit.show()
    self.__window.show()
    gtk.main()

  def __click(self, widget, event=None, data=None):
    if widget = self.__btn_quit:
      self.__window.hide()
      gtk.main_quit()
Und hier funktioniert das Schließen per Button auch nur, wenn ich
self.__window.hide() ausführe.

Wenn ich "self.__window.hide()" weglasse und statt "self.__btn_quit.connect" "self.__btn_quit.connect_after" nutze, bleibt der Dialog auch hängen..

strange
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also bei mir geht schon das:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*- 
import pygtk; pygtk.require("2.0")
import gtk

class Fenster:
    def __init__(self):
        self.__window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.__window.connect("delete_event", lambda widget,event: gtk.main_quit())

        self.__btn_quit = gtk.Button(stock=gtk.STOCK_CLOSE)
        self.__btn_quit.connect("clicked", self.__click)
        self.__window.add(self.__btn_quit)
        self.__window.show_all()
        gtk.main()

    def __click(self, widget, event=None, data=None):
        if widget == self.__btn_quit:
            gtk.main_quit() 

Fenster()
Also irgendwie ist deine GTK+ Installation seltsam. Vielleicht GTK+2, PyGTK neuinstallieren?

EDIT by mawe: Doppelpost gelöscht
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import pygtk
pygtk.require("2.0")
import gtk

def slg():
    print 'called slg'
    dlg = gtk.Dialog("rock mich", None, 0,
            (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
    print 'created dlg'
    dlg.connect("delete_event", delete_event)
    chosen = dlg.run()
    print 'run dlg'
    dlg.destroy()
    dlg.hide()
    print 'destroyed dlg'
    return chosen

def delete_event(dialog, event):
    dialog.hide()

response = slg()
print 'left slg'
print response == gtk.RESPONSE_CLOSE
bringt nun auch bei mir Folgendes:

Code: Alles auswählen

[tmp] python dialog.py 
called slg
created dlg
run dlg
destroyed dlg
left slg
True
[tmp]
Ich habe nichts neu installiert. Beim Update hat sich meine Version von gtk von

Code: Alles auswählen

[~] pacman -Q gtk2
gtk2 2.6.1-5
auf

Code: Alles auswählen

[~] pacman -Q gtk2
gtk2 2.6.4-1
erhöht!

Ich freu mich![/code]
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
Antworten