web8 with Tkinter problem

12 views
Skip to first unread message

rgorenc

unread,
May 13, 2009, 5:25:06 AM5/13/09
to rpyc
Hi to all,
I'm trying to convert web8 example from pygtk to Tkinter, but having
problems. Maybe someone has any idea what can be wrong?
here is my client:
import Tkinter, rpyc
from safetk import SafeTk

def BrowserServiceFactory(browser):
class BrowserService(rpyc.Service):
def on_connect(self):
self._conn._config["allow_public_attrs"] = True
def exposed_navigate(self, url):
old_url = browser.txt_url.get()
if url.startswith("/"):
base = old_url.split("/")[0]
url = base + url
browser.txt_url.insert(0,url)
browser.on_navigate(None)
return BrowserService

class Browser(object):
def __init__(self):
self.conn = None
self.master=Tkinter.Tk()
frejm = Tkinter.Frame(self.master)
frejm.pack()
self.master.title("Web8 Browser")
self.txt_url = Tkinter.Entry(frejm,width=95)
self.txt_url.insert(0,"localhost/main")
self.txt_url.pack()
self.txt_url.bind('<Return>', self.on_navigate)
btn_send = Tkinter.Button
(frejm,text="Go",command=self.on_navigate).pack()
self.box_content = None

def on_close(self, widget):
if self.conn:
self.conn.close()
self.conn = None
widget.quit()

def on_navigate(self, data = None):
url = self.txt_url.get()
if "/" not in url:
url += "/"
host, page = url.split("/", 1)
if ":" in host:
addr, port = host.split(":", 1)
port = int(port)
else:
addr = host
port = 18833
if self.conn:
self.conn.close()
self.conn = None

self.box_content = Tkinter.Frame(self.master).pack()
self.conn = rpyc.connect(host, port, service =
BrowserServiceFactory(self))
# gobject.io_add_watch(self.conn, gobject.IO_IN,
self.bg_server) ???? I don't have any idea how to convert to Tkinter
self.conn.root.get_page(SafeTk, self.box_content, page)

def bg_server(self, source = None, cond = None):
if self.conn:
self.conn.poll_all()
return True
else:
return False

if __name__ == "__main__":
b = Browser()
Tkinter.mainloop()


and here is my server code:

from rpyc.utils.server import ThreadedServer
import rpyc,time, threading

class Web8Service(rpyc.Service):
def exposed_get_page(self, tk, content, page):
self.tk = tk
self.content = content
page = page.replace(" ", "_").lower()
pagefunc = getattr(self, "page_%s" % (page,), None)
if pagefunc:
pagefunc()
else:
self.lbl1 = self.tk.Label(self.tk,text="Page %r does not
exist" % (page,))
self.lbl1.pack()

def page_main(self):
counter = [0]
self.lbl1 = self.tk.Label(self.tk,"Hello mate, this is the
main page")
self.lbl1.pack()

def on_btn1_clicked(src):
counter[0] += 1
# self.lbl2.config(text="You have clicked the button %d
times" % (counter[0])).pack()

self.btn1 = self.tk.Button(self.tk,text="Add
1",command=on_btn1_clicked).pack()
active = [False]

def bg_timer_thread():
while active[0]:
rpyc.async(lbl3.set_text)("Server time is: %s" %
(time.ctime(),))
time.sleep(1)

bg_thread = [None]

def page_hello_world(self):
lbl = self.tk.Label(self.tk,text="Hello world!").pack()

if __name__ == "__main__":
t = ThreadedServer(Web8Service, port = 18833)
t.start()

and here is savetk:
import Tkinter

safe_Tk_classes = set([
"Text", "Radiobutton", "Frame", "Entry", "Button",
"ScrolledWindow",
"TextView", "Label","Listbox","Tk"])

class SafeTk(object):
for _name in dir(Tkinter):
if _name in safe_Tk_classes or _name.isupper():
exec "exposed_%s = Tkinter.%s" % (_name, _name)
del _name

SafeTk = SafeTk()

When I starte clinet and press button, following message appears:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "C:\Python25\work\rpyc\web8\testclientTk.py", line 77, in
on_navigate
self.conn.root.get_page(SafeTk, self.box_content, page)
File "C:\Python25\Lib\site-packages\rpyc\core\netref.py", line 123,
in __call__
return syncreq(_self, consts.HANDLE_CALL, args, kwargs)
File "C:\Python25\Lib\site-packages\rpyc\core\netref.py", line 45,
in syncreq
return conn().sync_request(handler, oid, *args)
File "C:\Python25\Lib\site-packages\rpyc\core\protocol.py", line
329, in sync_request
raise obj
AttributeError: 'SafeTk' object has no attribute 'tk'

I' m using latest rpyc, python 2.5. Maybe I missed something, but I
can't find what is wrong.....

rgorenc

unread,
May 14, 2009, 10:13:25 AM5/14/09
to rpyc
Hi again,
found mistake, beginners mistake.... :-)
by
Reply all
Reply to author
Forward
0 new messages