Created
September 11, 2014 03:26
-
-
Save maoe/f8ad8b80bb170c97a6e1 to your computer and use it in GitHub Desktop.
query-tooltip signal isn't emitted in gtk2hs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# example helloworld.py | |
import pygtk | |
pygtk.require('2.0') | |
import gtk | |
class HelloWorld: | |
# This is a callback function. The data arguments are ignored | |
# in this example. More on callbacks below. | |
def hello(self, widget, data=None): | |
print "Hello World" | |
def delete_event(self, widget, event, data=None): | |
# If you return FALSE in the "delete_event" signal handler, | |
# GTK will emit the "destroy" signal. Returning TRUE means | |
# you don't want the window to be destroyed. | |
# This is useful for popping up 'are you sure you want to quit?' | |
# type dialogs. | |
print "delete event occurred" | |
# Change FALSE to TRUE and the main window will not be destroyed | |
# with a "delete_event". | |
return False | |
def destroy(self, widget, data=None): | |
print "destroy signal occurred" | |
gtk.main_quit() | |
def tooltip(self, widget, x, y, keyboard_mode, tooltip, param): | |
print "query-tooltop handler" | |
return False | |
def __init__(self): | |
# create a new window | |
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) | |
# When the window is given the "delete_event" signal (this is given | |
# by the window manager, usually by the "close" option, or on the | |
# titlebar), we ask it to call the delete_event () function | |
# as defined above. The data passed to the callback | |
# function is NULL and is ignored in the callback function. | |
self.window.connect("delete_event", self.delete_event) | |
# Here we connect the "destroy" event to a signal handler. | |
# This event occurs when we call gtk_widget_destroy() on the window, | |
# or if we return FALSE in the "delete_event" callback. | |
self.window.connect("destroy", self.destroy) | |
# Sets the border width of the window. | |
self.window.set_border_width(10) | |
# Creates a new button with the label "Hello World". | |
self.button = gtk.Button("Hello World") | |
# When the button receives the "clicked" signal, it will call the | |
# function hello() passing it None as its argument. The hello() | |
# function is defined above. | |
self.button.connect("clicked", self.hello, None) | |
# This will cause the window to be destroyed by calling | |
# gtk_widget_destroy(window) when "clicked". Again, the destroy | |
# signal could come from here, or the window manager. | |
self.button.connect_object("clicked", gtk.Widget.destroy, self.window) | |
self.button.set_has_tooltip(True) | |
self.button.connect("query-tooltip", self.tooltip, None) | |
# This packs the button into the window (a GTK container). | |
self.window.add(self.button) | |
# The final step is to display this newly created widget. | |
self.button.show() | |
# and the window | |
self.window.show() | |
def main(self): | |
# All PyGTK applications must have a gtk.main(). Control ends here | |
# and waits for an event to occur (like a key press or mouse event). | |
gtk.main() | |
# If the program is run directly or passed as an argument to the python | |
# interpreter then create a HelloWorld instance and show it | |
if __name__ == "__main__": | |
hello = HelloWorld() | |
hello.main() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- A simple program to demonstrate Gtk2Hs. | |
module Main (Main.main) where | |
import Graphics.UI.Gtk | |
main :: IO () | |
main = do | |
initGUI | |
-- Create a new window | |
window <- windowNew | |
-- Here we connect the "destroy" event to a signal handler. | |
-- This event occurs when we call widgetDestroy on the window | |
-- or if the user closes the window. | |
onDestroy window mainQuit | |
-- Sets the border width and tile of the window. Note that border width | |
-- attribute is in 'Container' from which 'Window' is derived. | |
set window [ containerBorderWidth := 10, windowTitle := "Hello World" ] | |
-- Creates a new button with the label "Hello World". | |
button <- buttonNew | |
set button [ buttonLabel := "Hello World" ] | |
-- When the button receives the "clicked" signal, it will call the | |
-- function given as the second argument. | |
onClicked button (putStrLn "Hello World") | |
-- Gtk+ allows several callbacks for the same event. | |
-- This one will cause the window to be destroyed by calling | |
-- widgetDestroy. The callbacks are called in the sequence they were added. | |
onClicked button $ do | |
putStrLn "A \"clicked\"-handler to say \"destroy\"" | |
widgetDestroy window | |
set button [ widgetHasTooltip := True ] | |
on button queryTooltip $ \widget point'm tooltip -> do | |
putStrLn "queryTooltip handler" | |
return False | |
-- Insert the hello-world button into the window. | |
set window [ containerChild := button ] | |
-- The final step is to display this newly created widget. Note that this | |
-- also allocates the right amount of space to the windows and the button. | |
widgetShowAll window | |
-- All Gtk+ applications must have a main loop. Control ends here | |
-- and waits for an event to occur (like a key press or mouse event). | |
-- This function returns if the program should finish. | |
mainGUI |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment