PDA

View Full Version : Creating a GUI outside of the Vizard-Window using Tkinter


Sven
03-21-2012, 07:33 AM
Hi all,

I'm planning an experiment where the test subject is inside a chamber wearing VR-Glasses, on which the Vizard-Window is shown.
For the experimenter outside, I want to create a GUI using Tkinter that allows to control the various events happening during the experiment.
However, when I try to run my script, either the vizard-window is not opening until I close the Tkinter-GUI (if I create the GUI first), or the vizard-window opens but stops showing the splash-screen until I close the GUI (if I create the vizard-window first). A simplified code example is attached.
Does anybody have an idea how to solve this?

import viz
from Tkinter import *

viz.go()

track=viz.add('track.wrl')

class VizardApp:

def __init__(self, master=None):

self.varsp1=IntVar()
self.varsp2=IntVar()

Label(master, text="Audio Controls").grid(row=0)
Label(master, text=" ").grid(row=1)
Checkbutton(master, text="Playback 1 ON", variable=self.varsp1, command=self.prvar2).grid(row=2)
Checkbutton(master, text="Playback 2 ON", variable=self.varsp2, command=self.prvar2).grid(row=3)
Button(master, text="Quit", command=master.quit).grid(row=8, column=2)


def prvar1(self):
print "var1 is", self.varsp1.get(), "var2 is", self.varsp2.get()

def prvar2(self):

print "var2 is", self.varsp2.get(), "var1 is", self.varsp1.get()




root=Tk()

app=VizardApp(root)

root.mainloop()

Jeff
03-22-2012, 12:36 AM
You'll need to embed the Vizard graphics window into the TK application. See this (http://forum.worldviz.com/showthread.php?t=1345) thread for an example.

Sven
03-22-2012, 01:24 AM
Yes, I've seen this thread, and also tried the code in there - but if I understood it correctly, this code combines my tkinter-GUI and the vizard graphics into one window. I need two independent windows, one for the test subject's VR-Glasses, one for the experimenter's computer monitor.
Is this even possible?

JimC
03-22-2012, 07:45 AM
I'd try either:

1) spawn a subsidiary thread using either the thread or threading module to create and handle the tkinter window (no idea if it would work), or;

2) Make the tkinter window a separate program that communicates with the vizard script through a socket.

farshizzo
03-22-2012, 08:35 AM
I agree with JimC.

Alternatively, if you plan on upgrading to Vizard 4.0, you can use the new vizhtml module to create simple web pages that communicate with your script through any standard web browser.