Hi,
I am writing a NLIDB system, I have obtained a 'parser' module, and created my backend. My question is, how do I assign the parser file called 'parser.py' to the text-entry field of my GUI.
I have a text entry field where the user will type their question. When they press a 'Submit' button, I would like the parser file to execute and parse over the string in the text-field.
I have included some of the code below if it helps, and my GUI is coded in wxPython:
---------------:
## import all of the wxPython GUI package
from wxPython.wx import *
## import the calendar feature from the wxPython library
from wxPython.calendar import *
## import all extra utilities from the wxPython library
#from wxPython.utils import *
import sys,os
···
#----------------------------------------------------------------------------
# I have used unique identifiers to associate each menu
# item. The convention is identifiers beginning
# with 'ID', followed by the menu the option belongs to, then
# the option name.
ID_FILE_OPEN = wxNewId()
ID_FILE_CLOSE = wxNewId()
ID_FILE_EXIT = wxNewId()
ID_HELP_WITH_SYSTEM = wxNewId()
ID_HELP_ABOUT = wxNewId()
ID_SUPPORT_ASSISTANCE = wxNewId()
ID_BUTTON = wxNewId()
ID_LOG = wxNewId()
ID_CLEARBUTTON = wxNewId()
## Create a new frame class, derived from the wxPython Frame.
class myFrame(wxFrame):
def __init__(self, parent, id, title):
# First, call the base class ' __init__ ' method to create the frame
wxFrame.__init__(self, parent, id, title, style =
wxDEFAULT_FRAME_STYLE)
#----------------------------------------------------------------------------
# Layout the main Panels
#----------------------------------------------------------------------------
# Add a top panel and some controls to display the size and position
panelA = wxPanel (self, -1, size=(100,100), style = wxSUNKEN_BORDER)
panelA.SetBackgroundColour(wxColour(red=240, green=180, blue=252))
# Add a bottom panel and some controls to display the size and position
panelB = wxPanel (self, -1, size=(100,100), style = wxSUNKEN_BORDER)
panelB.SetBackgroundColour(wxNamedColour("MEDIUM ORCHID"))
#----------------------------------------------------------------------------
# Add Labels to Panels
#----------------------------------------------------------------------------
# Add a label for the 'Welcome' title
# then format the position, style and font on the top panelA
str = "WELCOME"
text = wxStaticText(panelA, -1, str, (295, 27))
font = wxFont(55, wxROMAN, wxNORMAL, wxBOLD)
text.SetFont(font)
text.SetBackgroundColour(wxColour(red=240, green=180, blue=252))
# Add a label for the clock
# then format the position, style and font on botton panelB
str = "TIME:"
text = wxStaticText(panelB, -1, str, (130,20))
font = wxFont(12, wxROMAN, wxNORMAL, wxBOLD)
text.SetFont(font)
text.SetBackgroundColour(wxNamedColour('MEDIUM ORCHID'))
# Add a label for the input field
# then format the position, style and font on panelB
str = "Please Enter Your Question:"
text = wxStaticText(self, -1, str, (355, 220))
font = wxFont(17, wxROMAN, wxNORMAL, wxBOLD)
text.SetFont(font)
text.SetBackgroundColour(wxNamedColour('MEDIUM ORCHID'))
# Add a label for the output area
# then format the position, style and font on panelB
str = "Response:"
text = wxStaticText(panelB, -1, str, (320, 235))
font = wxFont(15, wxROMAN, wxITALIC, wxBOLD)
text.SetFont(font)
text.SetBackgroundColour(wxNamedColour('MEDIUM ORCHID'))
# Add a label for the calendar
# then format the position, style and font on panelB
str = "CALENDAR"
text = wxStaticText(panelB, -1, str, (780,20))
font = wxFont(12, wxROMAN, wxNORMAL, wxBOLD)
text.SetFont(font)
text.SetBackgroundColour(wxNamedColour('MEDIUM ORCHID'))
#----------------------------------------------------------------------------
# Additional panels
#----------------------------------------------------------------------------
# Place a bar to underline the 'Welcome' title
panel1= wxPanel(panelA, 100,wxPoint(295,105), wxSize(400,5),
wxSIMPLE_BORDER)
panel1.SetBackgroundColour(wxColour(red=110, green=120, blue=121))
# Add a panel on which the clock is displayed
panel= wxPanel(panelB, 100,wxPoint(85,50), wxSize(130,120),
wxSIMPLE_BORDER)
panel.SetBackgroundColour(wxNamedColour("MEDIUM ORCHID"))
#----------------------------------------------------------------------------
# Add Images to a panel
#----------------------------------------------------------------------------
# Add a panel to the left of the 'Welcome' title for an image
panel= wxPanel(panelA, 100,wxPoint(90,30), wxSize(120,70),
wxSIMPLE_BORDER)
panel.SetBackgroundColour(wxColour(red=240, green=180, blue=252))
# image = wxImage("C:\Documents and Settings\Ahtesham\Desktop.jpg",
# wxBITMAP_TYPE_JPEG).ConvertToBitmap()
#
# imageView = wxStaticBitmap(panel,-1, image, wxDefaultPosition,
# wxDefaultSize)
# Add a panel to the right of the 'Welcome' title for an image
panelx= wxPanel(panelA, 100,wxPoint(770,30), wxSize(120,70),
wxSIMPLE_BORDER)
panel.SetBackgroundColour(wxColour(red=240, green=180, blue=252))
#----------------------------------------------------------------------------
# Add buttons to a panel
#----------------------------------------------------------------------------
# A 'Submit' button on the lower panelB
submit = wxButton(panelB, -1, ' SUBMIT ', (407,200))
submit.SetDefault()
# A 'Clear' button on the lower panelB
self.clear = wxButton(panelB, ID_CLEARBUTTON, ' Clear ', (498,200))
self.clear.SetDefault()
# Assign a method to clear the input field, on mousepress event.
EVT_BUTTON(self, ID_CLEARBUTTON, self.OnClear)
#----------------------------------------------------------------------------
# Create the text fields
#----------------------------------------------------------------------------
# single line text entry (input) field
self.input = wxTextCtrl(panelB, 20, "<Enter your question here>",
wxPoint(340,140), wxSize(305,-1))
#-----EVT_TEXT(self, 20, self.EvtText)
#-----EVT_CHAR(self.editname, self.EvtChar use later!
# A multiline TextCtrl for displaying system response/output
response = wxTextCtrl(panelB,ID_LOG, "", wxPoint(315,260),wxSize(350,100),
wxTE_MULTILINE | wxTE_READONLY)
response.SetInsertionPoint(200)
###Modify the input field here, to run the parser over it!
#----------------------------------------------------------------------------
# Add a calendar to the lower panelB
#----------------------------------------------------------------------------
# create an instance of the calendar
cal = wxCalendarCtrl(panelB, -1, wxDateTime_Now(), pos = (740,50),
style = wxCAL_SHOW_HOLIDAYS
> wxCAL_SUNDAY_FIRST
> wxCAL_SEQUENTIAL_MONTH_SELECTION
)
#----------------------------------------------------------------------------
# Create a menubar with several menus
#----------------------------------------------------------------------------
# create the 'File' menu, then add the 'Support' and 'Help' menu's.
# Notice that we use the identifiers created above to associate an ID
# to each menu item (we will use the ID again when
# we want to 'tell' the program what to do when the
# user selects a menu item).
# create the 'File' menu
file_menu = wxMenu()
file_menu.Append(ID_FILE_OPEN, 'Open File',
" Information about this program")
file_menu.Append(ID_FILE_CLOSE, 'Close File',
" To close a file")
file_menu.AppendSeparator()
file_menu.Append(ID_FILE_EXIT, 'Exit Program',
" Select to EXIT this program")
# create the 'Support' menu
support_menu = wxMenu()
support_menu.Append(ID_SUPPORT_ASSISTANCE, 'Assistance',
" Select for how to seek assistance with the program")
# create the 'Help' menu
help_menu = wxMenu()
help_menu.AppendSeparator()
help_menu.Append(ID_HELP_WITH_SYSTEM, 'With this system...',
" Please do the following")
# a submenu in the 'Help' menu
submenu = wxMenu()
submenu.Append(2031," Train Routes ( EXT: 2031 ) ")
submenu.Append(2032," Delays and Cancellations ( EXT: 2032 ) ")
submenu.Append(2033," Dyslexia and Spelling Difficulty ( EXT: 2033 ) ")
help_menu.AppendMenu(203, "About", submenu)
# we now need a menu bar to hold the menus created
menu_bar = wxMenuBar()
# Add our menus to the menu bar. The first argument is the
# menu (created above), and the second is what we want to
# appear on the menu bar.
menu_bar.Append(file_menu, 'File')
menu_bar.Append(support_menu, 'Support')
menu_bar.Append(help_menu, 'Help')
# set the menu bar (tells the system we're done)
self.SetMenuBar(menu_bar)
#----------------------------------------------------------------------------
# Define sizers to layout panels (i.e. panelA and panelB)
#----------------------------------------------------------------------------
box = wxBoxSizer(wxVERTICAL)
box.Add(panelA, 1, wxEXPAND)
box.Add(panelB, 4, wxEXPAND)
self.SetAutoLayout(true)
self.SetSizer(box)
self.Layout()
#----------------------------------------------------------------------------
# Define methods and events for the menubar
#----------------------------------------------------------------------------
# Associate some events with methods of this class
EVT_MENU(self, ID_FILE_EXIT, self.OnFileExit)
EVT_MENU(self, ID_SUPPORT_ASSISTANCE, self.Enquiry)
EVT_MENU(self, ID_HELP_WITH_SYSTEM, self.SystemHelp)
def OnFileExit(self, evt):
# This is executed when the user clicks the 'File' option
# on the menu. We ask the user if they *really*
# want to exit, then close everything down if they do.
dlg = wxMessageDialog(self, 'Exit Program?', 'Are you sure you wish to exit!', wxYES_NO | wxICON_QUESTION)
if dlg.ShowModal() == wxID_YES:
dlg.Destroy()
self.Close(true)
else:
dlg.Destroy()
def Enquiry(self, evt):
dlg = wxMessageDialog(self, " In case of major system error(s), contact Ahtesham\n"
" on the Emergency Number: (0208) 7882718 ",
" Information ",wxOK | wxICON_INFORMATION)
dlg.ShowModal()
if dlg.ShowModal() == wxOK:
dlg.Destroy()
self.Close(true)
else:
dlg.Destroy()
def SystemHelp(self, evt):
dlg = wxMessageDialog(self, " Please to do following:\n"
" 1. Seek assistance at the Information Desk. OR"
"\n"
" 2. Call the Helpline on ' (0800) 112233 '.",
"Information" ,wxOK | wxICON_INFORMATION)
dlg.ShowModal()
if dlg.ShowModal() == wxOK:
dlg.Destroy()
self.Close(true)
else:
dlg.Destroy()
#---------------------------------------------------------------------------
# Define a method to clear the text entry field!
#---------------------------------------------------------------------------
def OnClear(self, event):
self.input.Clear()
#----------------------------------------------------------------------------
# Define methods and events for the calendar
#----------------------------------------------------------------------------
# select a date
def OnCalSelected(self):
self.log.write('OnCalSelected: %s\n' % evt.GetDate())
# change a month
def OnChangeMonth(self, evt=None):
cur_month = self.cal.GetDate().GetMonth() + 1 # convert wxDateTime 0-11 => 1-12
for month, day in self.holidays:
if month == cur_month:
self.cal.SetHoliday(day)
# Highlight the date selected
EVT_CALENDAR(self, cal.GetId(), self.OnCalSelected)
# Change the month on selection of the month arrows
EVT_CALENDAR_MONTH(self, cal.GetId(), self.OnChangeMonth)
# (these months don't move around)
self.holidays = [(1,1), (10,31), (12,25) ]
self.OnChangeMonth()
#----------------------------------------------------------------------------
# Every wxWindows application must have a class derived from wxApp
#----------------------------------------------------------------------------
class MyApp(wxApp):
def OnInit(self):
# Create an instance of our customized Frame class
frame = myFrame(NULL, -1, '(RJIS) Rail Journey Information System')
frame.Show(true)
# Tell wxWindows that this is our main window
self.SetTopWindow(frame)
# Return a success flag
return true
##########################################################################
## Run the application to test the code ##
##########################################################################
app=MyApp(1) # Create an instance of the application class
app.MainLoop() # Tell it to start processing events
-----------------------------------------------------------------------------------
Many Thanks in advance,
A.T.
_________________________________________________________________
Sign-up for a FREE BT Broadband connection today! http://www.msn.co.uk/specials/btbroadband