# Demonstration on how to use the GTK-server with Python by UDP. # Should work with Python 2.2.2 on Linux and Windows platforms. # # August 2, 2004 by PvE with new GTK-server commandline syntax. # Based on the TCP demo script by Evan Hempel. # Revised for GTK-server 1.2 October 8, 2004 by PvE. # Revised for GTK-server 1.3 December 6, 2004 by PvE. # # Run with python. Start with 'python demo.py'. import os import time import socket # Define sending bytes to UDP socket def send(server, data): server.send(data) # Define receiving bytes by UDP socket def recieve(server): data = [] data.append(server.recv(32)) # get 32 bytes at a time ret = ''.join(data) return ret # start the server os.spawnlp(os.P_NOWAIT, 'gtk-server', 'gtk-server', '-udp=localhost:50000 -detach') time.sleep(0.25) # wait a quarter second for server to start gtk_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) gtk_server.connect(('localhost', 50000)) send(gtk_server, "gtk_init NULL NULL") tmp = recieve(gtk_server) send(gtk_server, "gtk_window_new 0") win = recieve(gtk_server) send(gtk_server, "gtk_window_set_title "+win+" \"Python Demo program with UDP\"") tmp = recieve(gtk_server) send(gtk_server, "gtk_widget_set_usize "+win+" 450 400") tmp = recieve(gtk_server) send(gtk_server, "gtk_table_new 50 50 1") table = recieve(gtk_server) send(gtk_server, "gtk_container_add "+win+" "+table) tmp = recieve(gtk_server) send(gtk_server, "gtk_button_new_with_label Exit") button = recieve(gtk_server) send(gtk_server, "gtk_table_attach_defaults "+table+" "+button+" 41 49 45 49") tmp = recieve(gtk_server) send(gtk_server, "gtk_entry_new") entry = recieve(gtk_server) send(gtk_server, "gtk_table_attach_defaults "+table+" "+entry+" 1 40 45 49") tmp = recieve(gtk_server) send(gtk_server, "gtk_text_new NULL NULL") text = recieve(gtk_server) send(gtk_server, "gtk_table_attach_defaults "+table+" "+text+" 1 49 8 44") tmp = recieve(gtk_server) send(gtk_server, "gtk_radio_button_new_with_label_from_widget NULL Yes") radio1 = recieve(gtk_server) send(gtk_server, "gtk_table_attach_defaults "+table+" "+radio1+" 1 10 1 4") tmp = recieve(gtk_server) send(gtk_server, "gtk_radio_button_new_with_label_from_widget "+radio1+" No") radio2 = recieve(gtk_server) send(gtk_server, "gtk_table_attach_defaults "+table+" "+radio2+" 1 10 4 7") tmp = recieve(gtk_server) send(gtk_server, "gtk_widget_show_all "+win) tmp = recieve(gtk_server) send(gtk_server, "gtk_widget_grab_focus "+entry) tmp = recieve(gtk_server) event = 0 while event != button: send(gtk_server, "gtk_server_callback wait") event = recieve(gtk_server) if event == entry: send(gtk_server, "gtk_entry_get_text "+entry) tmp = recieve(gtk_server) send(gtk_server, "gtk_text_insert "+text+" NULL NULL NULL "+tmp+" -1") tmp = recieve(gtk_server) send(gtk_server, "gtk_entry_set_text "+entry+" \" \"") tmp = recieve(gtk_server) send(gtk_server, "gtk_server_exit") # exit