Hi,
Thanks for the suggestion and Im trying it out with pgu. Now Im having
problems with the pgu interface. Can anyone help me?
I've attached my test code. Its basically a button or event that brings
up a text entry dialog. So far its fine, as soon as the dialog is
closed, it wont close. Any ideas?
Cheers
Stan
René Dudfield wrote:
hi,
Lamina allows you to use any pygame 2d gui with opengl.
http://pitchersduel.python-hosting.com/browser/branches/Lamina/
It's fairly easy to use, and comes with demos for ocempgui and pgu.
cheers,
On Wed, Jun 18, 2008 at 2:58 PM, Astan Chee <[EMAIL PROTECTED]> wrote:
Hi,
I was wondering if there is a way to get a simple text entry dialog on a
pygame+opengl surface. I've tried several and all of them seem to dislike
doing a .blit on a opengl surface and crash badly whenever I do anything on
it. Are there simple alternatives?
Thanks
Astan
--
"Formulations of number theory: Complete, Consistent, Non-trivial. Choose
two."
Animal Logic
http://www.animallogic.com
Please think of the environment before printing this email.
This email and any attachments may be confidential and/or privileged. If you
are not the intended recipient of this email, you must not disclose or use
the information contained in it. Please notify the sender immediately and
delete this document if you have received it in error. We do not guarantee
this email is error or virus free.
--
"Formulations of number theory: Complete, Consistent, Non-trivial. Choose two."
Animal Logic
http://www.animallogic.com
Please think of the environment before printing this email.
This email and any attachments may be confidential and/or privileged. If you
are not the intended recipient of this email, you must not disclose or use the
information contained in it. Please notify the sender immediately and delete
this document if you have received it in error. We do not guarantee this email
is error or virus free.
#!/usr/bin/env python
# demo of laminar.PanelOverlaySurface, by
# David Keeney 2006
# based on version of Nehe's OpenGL lesson04
# by Paul Furber 2001 - [EMAIL PROTECTED]
# you need pgu to be installed, and you need a copy of the default theme directory
# as 'test_theme', and you need the accompanying config.txt in that test_theme dir.
import sys
sys.path.insert( 0, '..' )
from OpenGL.GL import *
from OpenGL.GLU import *
import pygame
from pygame.locals import *
# import gui stuff
try:
from pgu import gui as pgui
except ImportError:
print "PGU GUI must be installed in order to run this demo. "
print "PGU can be obtained from: "
print " https://sourceforge.net/project/showfiles.php?group_id=145281"
sys.exit()
import lamina
rtri = rquad = 0.0
triOn = quadOn = True
zoomAngle = 45
open_d = None
class OpenDialog(pgui.Dialog):
def __init__(self,**params):
title = pgui.Label("Input Position")
t = pgui.Table()
self.value = pgui.Form()
t.tr()
t.td(pgui.Label("Position: "))
t.td(pgui.Input(name="pos"),colspan=3)
t.tr()
e = pgui.Button("Ok")
e.connect(pgui.CLICK,self.send,pgui.CHANGE)
t.td(e,colspan=2)
e = pgui.Button("Cancel")
e.connect(pgui.CLICK,self.close,None)
t.td(e,colspan=2)
pgui.Dialog.__init__(self,title,t)
def resize((width, height)):
if height==0:
height=1
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(zoomAngle, 1.0*width/height, 0.1, 100.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
def init():
glShadeModel(GL_SMOOTH)
glClearColor(0.0, 0.5, 0.0, 0.0)
glClearDepth(1.0)
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LEQUAL)
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
def draw():
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
glTranslatef(-1.5, 0.0, -6.0)
# draw triangle
global rtri
glRotatef(rtri, 0.0, 1.0, 0.0)
glBegin(GL_TRIANGLES)
glColor3f(1.0, 0.0, 0.0)
glVertex3f(0.0, 1.0, 0.0)
glColor3f(0.0, 1.0, 0.0)
glVertex3f(-1.0, -1.0, 0)
glColor3f(0.0, 0.0, 1.0)
glVertex3f(1.0, -1.0, 0)
glEnd()
# draw quad
glLoadIdentity()
glTranslatef(1.5, 0.0, -6.0)
global rquad
glRotatef(rquad, 1.0, 0.0, 0.0)
glColor3f(0.5, 0.5, 1.0)
glBegin(GL_QUADS)
glVertex3f(-1.0, 1.0, 0)
glVertex3f(1.0, 1.0, 0)
glVertex3f(1.0, -1.0, 0)
glVertex3f(-1.0, -1.0, 0)
glEnd()
# draw gui
glLoadIdentity()
global gui_screen
gui_screen.display()
def main():
global rtri, rquad, gui_screen, open_d
video_flags = OPENGL|DOUBLEBUF
pygame.init()
pygame.display.set_mode((640,480), video_flags)
font = pygame.font.SysFont("default", 18)
fontBig = pygame.font.SysFont("default", 24)
fontSub = pygame.font.SysFont("default", 20)
theme = pgui.Theme('test_theme');
resize((640,480))
init()
# create PanelOverlaySurface
# gui_screen = lamina.LaminaPanelSurface((640,480), (-3.3, 2.5, 6.6, 5))
gui_screen = lamina.LaminaScreenSurface()
gui = pgui.App(theme=theme)
gui._screen = gui_screen.surf
# func to toggle triangle spin
def triTog():
global triOn
triOn = not triOn
# func to toggle quad spin
def quadTog():
global quadOn
quadOn = not quadOn
# func to toggle zoom
def zoomTog():
global zoomAngle
if zoomAngle == 45:
zoomAngle = 30
else:
zoomAngle = 45
resize((640,480))
gui_screen.refreshPosition()
gui.repaint(gui_screen.surf)
def action_open(meme):
global open_d
open_d.close()
fname = open_d.value['pos']
print fname.value
# create page # layout using document
lo = pgui.Container(width=640)
# create page label
title = pgui.Label("Lamina Demo : PGU", font=fontBig)
lo.add(title,29,13)
# create triangle button, connect to triTog handler function,
# and install in gui
btn1 = pgui.Button("Stop/Start Triangle")
btn1.connect(pgui.CLICK, triTog)
lo.add(btn1,120,440)
btn2 = pgui.Button("Stop/Start Quad")
btn2.connect(pgui.CLICK, quadTog)
lo.add(btn2,420,440)
# create zoom button, connect to zoomTog handler function,
# and install in gui
btn3 = pgui.Button('Zoom')
btn3.connect(pgui.CLICK, zoomTog)
lo.add(btn3,300,440)
open_d = OpenDialog()
open_d.connect(pgui.CHANGE,action_open,None)
btn4 = pgui.Button('Ask')
btn4.connect(pgui.CLICK, open_d.open)
lo.add(btn4,300,240)
gui.init(lo)
frames = 0
ticks = pygame.time.get_ticks()
while 1:
event = pygame.event.poll()
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
break
# handle gui events and raster updating
gui.event((event))
chg = gui.update(gui_screen.surf)
if chg:
gui_screen.refresh(chg)
# draw all objects
draw()
# update rotation counters
if triOn:
rtri += 0.2
if quadOn:
rquad+= 0.2
# make changes visible
pygame.display.flip()
frames = frames+1
print "fps: %d" % ((frames*1000)/(pygame.time.get_ticks()-ticks))
pygame.quit()
if __name__ == '__main__': main()