"Dialog to specify or edit the parameters for a user configured help source."
class GetHelpSourceDialog(Toplevel
):
def __init__(self
, parent
, title
, menuItem
='', filePath
=''):
"""Get menu entry and url/ local file location for Additional Help
User selects a name for the Help resource and provides a web url
or a local file as its source. The user can enter a url or browse
Toplevel
.__init
__(self
, parent
)
self
.configure(borderwidth
=5)
self
.resizable(height
=FALSE
, width
=FALSE
)
self
.protocol("WM_DELETE_WINDOW", self
.Cancel
)
self
.withdraw() #hide while setting geometry
#needs to be done here so that the winfo_reqwidth is valid
#centre dialog over parent:
((parent
.winfo_rootx() + ((parent
.winfo_width()/2)
-(self
.winfo_reqwidth()/2)),
parent
.winfo_rooty() + ((parent
.winfo_height()/2)
-(self
.winfo_reqheight()/2)))))
self
.deiconify() #geometry set, unhide
self
.bind('<Return>', self
.Ok
)
self
.menu
= StringVar(self
)
self
.path
= StringVar(self
)
self
.fontSize
= StringVar(self
)
self
.frameMain
= Frame(self
, borderwidth
=2, relief
=GROOVE
)
self
.frameMain
.pack(side
=TOP
, expand
=TRUE
, fill
=BOTH
)
labelMenu
= Label(self
.frameMain
, anchor
=W
, justify
=LEFT
,
self
.entryMenu
= Entry(self
.frameMain
, textvariable
=self
.menu
,
self
.entryMenu
.focus_set()
labelPath
= Label(self
.frameMain
, anchor
=W
, justify
=LEFT
,
text
='Help File Path: Enter URL or browse for file')
self
.entryPath
= Entry(self
.frameMain
, textvariable
=self
.path
,
self
.entryMenu
.focus_set()
labelMenu
.pack(anchor
=W
, padx
=5, pady
=3)
self
.entryMenu
.pack(anchor
=W
, padx
=5, pady
=3)
labelPath
.pack(anchor
=W
, padx
=5, pady
=3)
self
.entryPath
.pack(anchor
=W
, padx
=5, pady
=3)
browseButton
= Button(self
.frameMain
, text
='Browse', width
=8,
browseButton
.pack(pady
=3)
frameButtons
= Frame(self
)
frameButtons
.pack(side
=BOTTOM
, fill
=X
)
self
.buttonOk
= Button(frameButtons
, text
='OK',
width
=8, default
=ACTIVE
, command
=self
.Ok
)
self
.buttonOk
.grid(row
=0, column
=0, padx
=5,pady
=5)
self
.buttonCancel
= Button(frameButtons
, text
='Cancel',
width
=8, command
=self
.Cancel
)
self
.buttonCancel
.grid(row
=0, column
=1, padx
=5, pady
=5)
("HTML Files", "*.htm *.html", "TEXT"),
("PDF Files", "*.pdf", "TEXT"),
("Windows Help Files", "*.chm"),
("Text Files", "*.txt", "TEXT"),
dir, base
= os
.path
.split(path
)
if sys
.platform
[:3] == 'win':
dir = os
.path
.join(os
.path
.dirname(sys
.executable
), 'Doc')
if not os
.path
.isdir(dir):
opendialog
= tkFileDialog
.Open(parent
=self
, filetypes
=filetypes
)
file = opendialog
.show(initialdir
=dir, initialfile
=base
)
"Simple validity check for a sensible menu item name"
tkMessageBox
.showerror(title
='Menu Item Error',
message
='No menu item specified',
self
.entryMenu
.focus_set()
tkMessageBox
.showerror(title
='Menu Item Error',
message
='Menu item too long:'
'\nLimit 30 characters.',
self
.entryMenu
.focus_set()
"Simple validity check for menu file path"
if not path
: #no path specified
tkMessageBox
.showerror(title
='File Path Error',
message
='No help file path specified.',
self
.entryPath
.focus_set()
elif path
.startswith('www.') or path
.startswith('http'):
if not os
.path
.exists(path
):
tkMessageBox
.showerror(title
='File Path Error',
message
='Help file path does not exist.',
self
.entryPath
.focus_set()
def Ok(self
, event
=None):
if self
.MenuOk() and self
.PathOk():
self
.result
= (self
.menu
.get().strip(),
if sys
.platform
== 'darwin':
if (path
.startswith('www') or path
.startswith('file:')
or path
.startswith('http:')):
# Mac Safari insists on using the URI form for local files
self
.result
[1] = "file://" + path
def Cancel(self
, event
=None):
if __name__
== '__main__':
dlg
= GetHelpSourceDialog(root
, 'Get Help Source')
Button(root
,text
='Dialog', command
=run
).pack()