# Demonstration on how to use the GTK-server with Python by TCP. # Should work with Python 2.2.2 on Linux and Windows platforms. # # November 22, 2003 by Evan Hempel - http://echempel.freezope.org/mkbinding. # Revised august 1, 2004 by PvE with new GTK-server commandline syntax. # 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 def send(server, data): server.send(data) def recieve(server): data = [] data.append(server.recv(1)) # get one byte at a time while data[-1] != '\n': # read until we read a newline data.append(server.recv(1)) # get one byte at a time ret = ''.join(data) #print repr(ret) return ret # start the server Unix/Linux os.spawnlp(os.P_NOWAIT, 'gtk-server', 'gtk-server', '-tcp=localhost:50005 -nodetach') # Reported to work for Win32 by Norbert Klamann: #os.spawnl(os.P_NOWAIT, 'gtk-server', 'gtk-server', 'tcp=localhost:50000') time.sleep(0.25) # wait a quarter second for server to start gtk_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) gtk_server.connect(('localhost', 50005)) 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 TCP\"") 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