I'm new to Python programming. I have 6-8 small desktop applications I want to write that will use a GUI. I thought to be smart, I would build my basic GUI shell and then import it into each of my apps. That way they will all have the same look and feel. Also, as I enhance the base GUI package, those changes will flow to all my little apps.
I'm having trouble figuring out how to properly import and then reference the GUI. Below is my base GUI package first. After that, I show what I've done to try and import it. It actually imports but I can't change any of the variables. I'm completely lost.
If someone could point me in the right direction without getting too technical I would really appreciate it. I'm still confused on the whole OOP thing.
Base GUI package
# bsgui which stands for Base GUI is the basic GUI for starting new apps
#
# The variables are set up so you can edit them easily for your new
# Application
# Versioning
var_Version = "1.00"
var_Title = "bsgui Version: %s" % var_Version
var_HelpAboutMbxTitle = "About bsgui"
var_Menu_Custom = "XXXX"
print ("Hello World")
import wx
# Create the Main window
class cls_gui(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id, var_Title)
# Add the panel to the frame
pnl_gui_main=wx.Panel(self)
# Menu Bar and structure
wig_menu_bar=wx.MenuBar()
# Create the File Menu Tree
mnu_File=wx.Menu()
wig_menu_bar.Append(mnu_File,"&File")
mnu_Edit=wx.Menu()
wig_menu_bar.Append(mnu_Edit, "&Edit")
mnu_Options=wx.Menu()
wig_menu_bar.Append(mnu_Options, "&Options")
mnu_Custom=wx.Menu()
wig_menu_bar.Append(mnu_Custom, var_Menu_Custom)
mnu_Tools=wx.Menu()
wig_menu_bar.Append(mnu_Tools, "&Tools")
mnu_Help=wx.Menu()
wig_menu_bar.Append(mnu_Help, "&Help")
# These are options under the File menubar option
printMI = mnu_File.Append(wx.NewId(), "&Print", "Print the current record")
exitMI = mnu_File.Append(wx.NewId(), "E&xit", "Exit the program")
self.Bind(wx.EVT_MENU, self.fcn_closebutton, exitMI)
# Help tree options
helpMI = mnu_Help.Append(wx.NewId(), "&About", "About the program")
self.Bind(wx.EVT_MENU, self.fcn_HelpAbout, helpMI)
# This statment makes the menubar appear
self.SetMenuBar(wig_menu_bar)
# Create the status bar in the bottom of the app
wig_status_bar=self.CreateStatusBar()
# Add a button to the panel
btn_exit=wx.Button(pnl_gui_main,label="Exit",pos=(5,575),
size=(50,30))
self.Bind(wx.EVT_BUTTON, self.fcn_closebutton, btn_exit)
# Make the X button close when you click it
self.Bind(wx.EVT_CLOSE, self.fcn_closewindow)
# This function closes the app when the button is clicked
def fcn_closebutton(self,event):
self.Close(True)
# This function displays the Help / About information
def fcn_HelpAbout(self, event):
mbx_HelpAbout=wx.MessageDialog(None, var_Title,
var_HelpAboutMbxTitle,wx.OK)
mbx_HelpAbout_Answer=mbx_HelpAbout.ShowModal()
mbx_HelpAbout.Destroy()
# This function closes the app when the X is clicked
def fcn_closewindow(self, event):
self.Destroy()
if __name__ == "__main__":
app = wx.PySimpleApp() #application object - runs your program
frame=cls_gui(parent=None,id=-1) #frame object - need a frame
frame.Show()
frame.Maximize()
app.MainLoop() # kicks off the program
Here is how I got bsgui to import and open but can't access any of the variables
import wx
import bsgui
# use the following 2 lines to see what path Python is using then any
# you want to import needs to be put in one of the path folders. After
# that you can use the import command. Python files should not include
# the .py extension
# import sys
# print sys.path
if __name__ == "__main__":
app = wx.PySimpleApp() #application object - runs your program
frame=bsgui.cls_gui(parent=None,id=-1) #frame object - need a frame
frame.Show()
frame.Maximize()
app.MainLoop() # kicks off the program
That's because you created local variables. They stop existing when the function/method returns. If you want to make them persistent then you need to create them as attributes on the object.
self.pnl_gui_main=wx.Panel(self)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.