GUI in Python using wxGlade

D

diffuser78

I recently tried a hand at wxGlade and was happy to see it designs a
GUI for you in minutes. I am a newbie Python coder. I am not completely
aware of GUI programming.

I can easily make menubars etc but I am not too sure sure how to get
more windows poppping to get more information. I mean when you click
something, a new windows would open and ask for input like that. Since
I am using wxGlade and wxPython....can you suggest me a quick tutorial
for GUI programming.

Every help is appreciate,

Thanks
 
S

Steve Holden

I recently tried a hand at wxGlade and was happy to see it designs a
GUI for you in minutes. I am a newbie Python coder. I am not completely
aware of GUI programming.

I can easily make menubars etc but I am not too sure sure how to get
more windows poppping to get more information. I mean when you click
something, a new windows would open and ask for input like that. Since
I am using wxGlade and wxPython....can you suggest me a quick tutorial
for GUI programming.

Every help is appreciate,
Without having time to go into a full, the way to proceed with Glade
(unless I am mistaken) is to design each window independently of the
others, and to use a button press in one window to create an instance of
another type of window.

Good luck!

regards
Steve
 
D

diffuser78

I am pasting my code. I created a small little GUI without any
functionality as of yet. I wanted to ask few questions on that.

Code:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# generated by wxGlade 0.4cvs on Thu Jun 15 10:51:12 2006

import wx

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.panel_1 = wx.Panel(self, -1)

        # Menu Bar
        self.frame_1_menubar = wx.MenuBar()
        self.SetMenuBar(self.frame_1_menubar)
        self.File = wx.Menu()
        self.CreateNewConfigFile = wx.MenuItem(self.File, wx.NewId(),
_("Create New Config File"), "", wx.ITEM_NORMAL)
        self.File.AppendItem(self.CreateNewConfigFile)
        self.OpenConfigFile = wx.MenuItem(self.File, wx.NewId(),
_("Open Config File"), "", wx.ITEM_NORMAL)
        self.File.AppendItem(self.OpenConfigFile)
        self.EditConfigFile = wx.MenuItem(self.File, wx.NewId(),
_("Edit Config File"), "", wx.ITEM_NORMAL)
        self.File.AppendItem(self.EditConfigFile)
        self.Close = wx.MenuItem(self.File, wx.NewId(), _("Close"), "",
wx.ITEM_NORMAL)
        self.File.AppendItem(self.Close)
        self.Exit = wx.MenuItem(self.File, wx.NewId(), _("Exit"), "",
wx.ITEM_NORMAL)
        self.File.AppendItem(self.Exit)
        self.frame_1_menubar.Append(self.File, _("File"))
        self.Action = wx.Menu()
        self.AddComputer = wx.MenuItem(self.Action, wx.NewId(), _("Add
Computer"), "", wx.ITEM_NORMAL)
        self.Action.AppendItem(self.AddComputer)
        self.Shutdown = wx.MenuItem(self.Action, wx.NewId(),
_("Shutdown..."), "", wx.ITEM_NORMAL)
        self.Action.AppendItem(self.Shutdown)
        self.ShutdownAll = wx.MenuItem(self.Action, wx.NewId(),
_("Shutdown All"), "", wx.ITEM_NORMAL)
        self.Action.AppendItem(self.ShutdownAll)
        self.frame_1_menubar.Append(self.Action, _("Action"))
        self.Help = wx.Menu()
        self.Tutorial = wx.MenuItem(self.Help, wx.NewId(),
_("Tutorial"), "", wx.ITEM_NORMAL)
        self.Help.AppendItem(self.Tutorial)
        self.AboutUs = wx.MenuItem(self.Help, wx.NewId(), _("About
us"), "", wx.ITEM_NORMAL)
        self.Help.AppendItem(self.AboutUs)
        self.frame_1_menubar.Append(self.Help, _("Help"))
        # Menu Bar end
        self.frame_1_statusbar = self.CreateStatusBar(1, 0)

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle(_("Test"))
        self.SetSize((600, 450))
        self.frame_1_statusbar.SetStatusWidths([-1])
        # statusbar fields
        frame_1_statusbar_fields = [_("Test Application")]
        for i in range(len(frame_1_statusbar_fields)):

self.frame_1_statusbar.SetStatusText(frame_1_statusbar_fields[i], i)
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
        self.SetAutoLayout(True)
        self.SetSizer(sizer_1)
        self.Layout()
        # end wxGlade

# end of class MyFrame


class MyApp(wx.App):
    def OnInit(self):
        wx.InitAllImageHandlers()
        frame_1 = MyFrame(None, -1, "")
        self.SetTopWindow(frame_1)
        frame_1.Show()
        return 1

# end of class MyApp

if __name__ == "__main__":
    import gettext
    gettext.install("app") # replace with the appropriate catalog name

    app = MyApp(0)
    app.MainLoop()

If I click on any of the items of the File Menu, say I click on "Open
config File", I want a new windows to come up.

My questions is when I create a new Frame/Windows in wxGlade, will it
be wxFrame or wxMDI Frame......which one should I choose and why ?

I am not completely aware of all the small tools that wxGlade gives and
how to place them.


Any kind of help is greatly appreciated.

Thanks
 
S

Steve Holden

I am pasting my code. I created a small little GUI without any
functionality as of yet. I wanted to ask few questions on that.
[lots of code ...]

If I click on any of the items of the File Menu, say I click on "Open
config File", I want a new windows to come up.

My questions is when I create a new Frame/Windows in wxGlade, will it
be wxFrame or wxMDI Frame......which one should I choose and why ?

I am not completely aware of all the small tools that wxGlade gives and
how to place them.


Any kind of help is greatly appreciated.
As I already said I'm a bit to busy to help with specifics right now.
Two places you might go for help:

1: http://www.holdenweb.com/PyConTX2006/wxPythonIntro.pdf

The introductory tutorial I gave at PyCon TX 2006

2: Email to (e-mail address removed)

There's a fairly friendly community who will take your code as
evidence you are trying to help yourself and explain the basics
as necessary.

regards
Steve
 
D

diffuser78

I am a newbie. I was looking for some code where I could a list of
different items from a file and display it in a list box. Then give a
user the capability to select some.

Basically, reading and writing to a file and displaying them in
different widgets...thats something I am looking for. If anybody can
point me to some good example tutorials...I will be greatly helped.

Thanks,

Every help is appreciated
 
J

John Salerno

I am a newbie. I was looking for some code where I could a list of
different items from a file and display it in a list box. Then give a
user the capability to select some.

Basically, reading and writing to a file and displaying them in
different widgets...thats something I am looking for. If anybody can
point me to some good example tutorials...I will be greatly helped.

Thanks,

Every help is appreciated

Have you tried looking at the code in the wxPython demo? In the ListBox
control demo, it populates a ListBox with items from a list, but you
could easily translate that into reading from a file, I think. Here's
the full code in case you don't have the demo:

import wx

#---------------------------------------------------------------------------

# This listbox subclass lets you type the starting letters of what you want to
# select, and scrolls the list to the match if it is found.
class FindPrefixListBox(wx.ListBox):
def __init__(self, parent, id, pos=wx.DefaultPosition, size=wx.DefaultSize,
choices=[], style=0, validator=wx.DefaultValidator):
wx.ListBox.__init__(self, parent, id, pos, size, choices, style, validator)
self.typedText = ''
self.log = parent.log
self.Bind(wx.EVT_KEY_DOWN, self.OnKey)


def FindPrefix(self, prefix):
self.log.WriteText('Looking for prefix: %s\n' % prefix)

if prefix:
prefix = prefix.lower()
length = len(prefix)

# Changed in 2.5 because ListBox.Number() is no longer supported.
# ListBox.GetCount() is now the appropriate way to go.
for x in range(self.GetCount()):
text = self.GetString(x)
text = text.lower()

if text[:length] == prefix:
self.log.WriteText('Prefix %s is found.\n' % prefix)
return x

self.log.WriteText('Prefix %s is not found.\n' % prefix)
return -1


def OnKey(self, evt):
key = evt.GetKeyCode()

if key >= 32 and key <= 127:
self.typedText = self.typedText + chr(key)
item = self.FindPrefix(self.typedText)

if item != -1:
self.SetSelection(item)

elif key == wx.WXK_BACK: # backspace removes one character and backs up
self.typedText = self.typedText[:-1]

if not self.typedText:
self.SetSelection(0)
else:
item = self.FindPrefix(self.typedText)

if item != -1:
self.SetSelection(item)
else:
self.typedText = ''
evt.Skip()

def OnKeyDown(self, evt):
pass


#---------------------------------------------------------------------------

class TestListBox(wx.Panel):
def __init__(self, parent, log):
self.log = log
wx.Panel.__init__(self, parent, -1)

sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
'twelve', 'thirteen', 'fourteen']

wx.StaticText(self, -1, "This example uses the wx.ListBox control.", (45, 10))
wx.StaticText(self, -1, "Select one:", (15, 50))
self.lb1 = wx.ListBox(self, 60, (100, 50), (90, 120), sampleList, wx.LB_SINGLE)
self.Bind(wx.EVT_LISTBOX, self.EvtListBox, self.lb1)
self.Bind(wx.EVT_LISTBOX_DCLICK, self.EvtListBoxDClick, self.lb1)
self.lb1.Bind(wx.EVT_RIGHT_UP, self.EvtRightButton)
self.lb1.SetSelection(3)
self.lb1.Append("with data", "This one has data");
self.lb1.SetClientData(2, "This one has data");


wx.StaticText(self, -1, "Select many:", (220, 50))
self.lb2 = wx.ListBox(self, 70, (320, 50), (90, 120), sampleList, wx.LB_EXTENDED)
self.Bind(wx.EVT_LISTBOX, self.EvtMultiListBox, self.lb2)
self.lb2.Bind(wx.EVT_RIGHT_UP, self.EvtRightButton)
self.lb2.SetSelection(0)

sampleList = sampleList + ['test a', 'test aa', 'test aab',
'test ab', 'test abc', 'test abcc',
'test abcd' ]
sampleList.sort()
wx.StaticText(self, -1, "Find Prefix:", (15, 250))
fp = FindPrefixListBox(self, -1, (100, 250), (90, 120), sampleList, wx.LB_SINGLE)
fp.SetSelection(0)


def EvtListBox(self, event):
self.log.WriteText('EvtListBox: %s, %s, %s, %s\n' %
(event.GetString(),
event.IsSelection(),
event.GetSelection(),
event.GetClientData()))

lb = event.GetEventObject()
data = lb.GetClientData(lb.GetSelection())

if data is not None:
self.log.WriteText('\tdata: %s\n' % data)


def EvtListBoxDClick(self, event):
self.log.WriteText('EvtListBoxDClick: %s\n' % self.lb1.GetSelection())
self.lb1.Delete(self.lb1.GetSelection())

def EvtMultiListBox(self, event):
self.log.WriteText('EvtMultiListBox: %s\n' % str(self.lb2.GetSelections()))

def EvtRightButton(self, event):
self.log.WriteText('EvtRightButton: %s\n' % event.GetPosition())

if event.GetEventObject().GetId() == 70:
selections = list(self.lb2.GetSelections())
selections.reverse()

for index in selections:
self.lb2.Delete(index)


#---------------------------------------------------------------------------

def runTest(frame, nb, log):
win = TestListBox(nb, log)
return win

#---------------------------------------------------------------------------




overview = """<html><body>
A listbox is used to select one or more of a list of
strings. The strings are displayed in a scrolling box, with the
selected string(s) marked in reverse video. A listbox can be single
selection (if an item is selected, the previous selection is removed)
or multiple selection (clicking an item toggles the item on or off
independently of other selections).
</body></html>
"""


if __name__ == '__main__':
import sys,os
import run
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
 
D

diffuser78

Did you paste any code ?

Also the link for the next message is not working .....


John said:
I am a newbie. I was looking for some code where I could a list of
different items from a file and display it in a list box. Then give a
user the capability to select some.

Basically, reading and writing to a file and displaying them in
different widgets...thats something I am looking for. If anybody can
point me to some good example tutorials...I will be greatly helped.

Thanks,

Every help is appreciated

Have you tried looking at the code in the wxPython demo? In the ListBox
control demo, it populates a ListBox with items from a list, but you
could easily translate that into reading from a file, I think. Here's
the full code in case you don't have the demo:

import wx

#---------------------------------------------------------------------------

# This listbox subclass lets you type the starting letters of what you want to
# select, and scrolls the list to the match if it is found.
class FindPrefixListBox(wx.ListBox):
def __init__(self, parent, id, pos=wx.DefaultPosition, size=wx.DefaultSize,
choices=[], style=0, validator=wx.DefaultValidator):
wx.ListBox.__init__(self, parent, id, pos, size, choices, style, validator)
self.typedText = ''
self.log = parent.log
self.Bind(wx.EVT_KEY_DOWN, self.OnKey)


def FindPrefix(self, prefix):
self.log.WriteText('Looking for prefix: %s\n' % prefix)

if prefix:
prefix = prefix.lower()
length = len(prefix)

# Changed in 2.5 because ListBox.Number() is no longer supported.
# ListBox.GetCount() is now the appropriate way to go.
for x in range(self.GetCount()):
text = self.GetString(x)
text = text.lower()

if text[:length] == prefix:
self.log.WriteText('Prefix %s is found.\n' % prefix)
return x

self.log.WriteText('Prefix %s is not found.\n' % prefix)
return -1


def OnKey(self, evt):
key = evt.GetKeyCode()

if key >= 32 and key <= 127:
self.typedText = self.typedText + chr(key)
item = self.FindPrefix(self.typedText)

if item != -1:
self.SetSelection(item)

elif key == wx.WXK_BACK: # backspace removes one character and backs up
self.typedText = self.typedText[:-1]

if not self.typedText:
self.SetSelection(0)
else:
item = self.FindPrefix(self.typedText)

if item != -1:
self.SetSelection(item)
else:
self.typedText = ''
evt.Skip()

def OnKeyDown(self, evt):
pass


#---------------------------------------------------------------------------

class TestListBox(wx.Panel):
def __init__(self, parent, log):
self.log = log
wx.Panel.__init__(self, parent, -1)

sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
'twelve', 'thirteen', 'fourteen']

wx.StaticText(self, -1, "This example uses the wx.ListBox control.", (45, 10))
wx.StaticText(self, -1, "Select one:", (15, 50))
self.lb1 = wx.ListBox(self, 60, (100, 50), (90, 120), sampleList, wx.LB_SINGLE)
self.Bind(wx.EVT_LISTBOX, self.EvtListBox, self.lb1)
self.Bind(wx.EVT_LISTBOX_DCLICK, self.EvtListBoxDClick, self.lb1)
self.lb1.Bind(wx.EVT_RIGHT_UP, self.EvtRightButton)
self.lb1.SetSelection(3)
self.lb1.Append("with data", "This one has data");
self.lb1.SetClientData(2, "This one has data");


wx.StaticText(self, -1, "Select many:", (220, 50))
self.lb2 = wx.ListBox(self, 70, (320, 50), (90, 120), sampleList, wx.LB_EXTENDED)
self.Bind(wx.EVT_LISTBOX, self.EvtMultiListBox, self.lb2)
self.lb2.Bind(wx.EVT_RIGHT_UP, self.EvtRightButton)
self.lb2.SetSelection(0)

sampleList = sampleList + ['test a', 'test aa', 'test aab',
'test ab', 'test abc', 'test abcc',
'test abcd' ]
sampleList.sort()
wx.StaticText(self, -1, "Find Prefix:", (15, 250))
fp = FindPrefixListBox(self, -1, (100, 250), (90, 120), sampleList, wx.LB_SINGLE)
fp.SetSelection(0)


def EvtListBox(self, event):
self.log.WriteText('EvtListBox: %s, %s, %s, %s\n' %
(event.GetString(),
event.IsSelection(),
event.GetSelection(),
event.GetClientData()))

lb = event.GetEventObject()
data = lb.GetClientData(lb.GetSelection())

if data is not None:
self.log.WriteText('\tdata: %s\n' % data)


def EvtListBoxDClick(self, event):
self.log.WriteText('EvtListBoxDClick: %s\n' % self.lb1.GetSelection())
self.lb1.Delete(self.lb1.GetSelection())

def EvtMultiListBox(self, event):
self.log.WriteText('EvtMultiListBox: %s\n' % str(self.lb2.GetSelections()))

def EvtRightButton(self, event):
self.log.WriteText('EvtRightButton: %s\n' % event.GetPosition())

if event.GetEventObject().GetId() == 70:
selections = list(self.lb2.GetSelections())
selections.reverse()

for index in selections:
self.lb2.Delete(index)


#---------------------------------------------------------------------------

def runTest(frame, nb, log):
win = TestListBox(nb, log)
return win

#---------------------------------------------------------------------------




overview = """<html><body>
A listbox is used to select one or more of a list of
strings. The strings are displayed in a scrolling box, with the
selected string(s) marked in reverse video. A listbox can be single
selection (if an item is selected, the previous selection is removed)
or multiple selection (clicking an item toggles the item on or off
independently of other selections).
</body></html>
"""


if __name__ == '__main__':
import sys,os
import run
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top