mirror of
https://github.com/python/cpython.git
synced 2025-07-13 22:35:18 +00:00

M configHelpSourceEdit.py 1. Attach configHelpSourceEdit error dialogs to parent to avoid Tk root pop-ups. 2. Make configHelpSourceEdit OK button the default and bind <Return>. 3. Reformat configHelpSourceEdit. 4. ConfigDialog.SaveAllChangedConfig() had a bug which caused additional help sources to be deleted when other config items were changed. 4. Uniform capitalization in configDialog. 5. Update configDialog doc string.
126 lines
4.9 KiB
Python
126 lines
4.9 KiB
Python
"Dialog to specify or edit the parameters for a user configured help source."
|
|
|
|
from Tkinter import *
|
|
import tkMessageBox
|
|
import os
|
|
|
|
class GetHelpSourceDialog(Toplevel):
|
|
def __init__(self, parent, title, menuItem='', filePath=''):
|
|
"""
|
|
menuItem - string, the menu item to edit, if any
|
|
filePath - string, the help file path to edit, if any
|
|
"""
|
|
Toplevel.__init__(self, parent)
|
|
self.configure(borderwidth=5)
|
|
self.resizable(height=FALSE, width=FALSE)
|
|
self.title(title)
|
|
self.transient(parent)
|
|
self.grab_set()
|
|
self.protocol("WM_DELETE_WINDOW", self.Cancel)
|
|
self.parent = parent
|
|
self.result = None
|
|
self.CreateWidgets()
|
|
self.menu.set(menuItem)
|
|
self.path.set(filePath)
|
|
self.withdraw() #hide while setting geometry
|
|
#needs to be done here so that the winfo_reqwidth is valid
|
|
self.update_idletasks()
|
|
#centre dialog over parent:
|
|
self.geometry("+%d+%d" %
|
|
((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.wait_window()
|
|
|
|
def CreateWidgets(self):
|
|
self.menu = StringVar(self)
|
|
self.path = StringVar(self)
|
|
self.fontSize = StringVar(self)
|
|
self.frameMain = Frame(self, borderwidth=2, relief=SUNKEN)
|
|
self.frameMain.pack(side=TOP, expand=TRUE, fill=BOTH)
|
|
labelMenu = Label(self.frameMain, anchor=W, justify=LEFT,
|
|
text='Menu Item:')
|
|
self.entryMenu = Entry(self.frameMain, textvariable=self.menu,
|
|
width=30)
|
|
self.entryMenu.focus_set()
|
|
labelPath = Label(self.frameMain, anchor=W, justify=LEFT,
|
|
text='Help File Path:')
|
|
self.entryPath = Entry(self.frameMain, textvariable=self.path,
|
|
width=40)
|
|
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)
|
|
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.buttonOk.bind('<Return>', self.Ok)
|
|
#self.buttonOk.focus()
|
|
self.buttonCancel = Button(frameButtons, text='Cancel',
|
|
width=8, command=self.Cancel)
|
|
self.buttonCancel.grid(row=0, column=1, padx=5, pady=5)
|
|
|
|
def MenuOk(self):
|
|
"Simple validity check for a sensible menu item name"
|
|
menuOk = True
|
|
menu = self.menu.get()
|
|
menu.strip()
|
|
if not menu:
|
|
tkMessageBox.showerror(title='Menu Item Error',
|
|
message='No menu item specified',
|
|
parent=self)
|
|
self.entryMenu.focus_set()
|
|
menuOk = False
|
|
elif len(menu) > 30:
|
|
tkMessageBox.showerror(title='Menu Item Error',
|
|
message='Menu item too long:'
|
|
'\nLimit 30 characters.',
|
|
parent=self)
|
|
self.entryMenu.focus_set()
|
|
menuOk = False
|
|
return menuOk
|
|
|
|
def PathOk(self):
|
|
"Simple validity check for menu file path"
|
|
pathOk = True
|
|
path = self.path.get()
|
|
path.strip()
|
|
if not path: #no path specified
|
|
tkMessageBox.showerror(title='File Path Error',
|
|
message='No help file path specified.',
|
|
parent=self)
|
|
self.entryPath.focus_set()
|
|
pathOk = False
|
|
elif not os.path.exists(path):
|
|
tkMessageBox.showerror(title='File Path Error',
|
|
message='Help file path does not exist.',
|
|
parent=self)
|
|
self.entryPath.focus_set()
|
|
pathOk = False
|
|
return pathOk
|
|
|
|
def Ok(self, event=None):
|
|
if self.MenuOk() and self.PathOk():
|
|
self.result = (self.menu.get().strip(),
|
|
self.path.get().strip())
|
|
self.destroy()
|
|
|
|
def Cancel(self, event=None):
|
|
self.result = None
|
|
self.destroy()
|
|
|
|
if __name__ == '__main__':
|
|
#test the dialog
|
|
root = Tk()
|
|
def run():
|
|
keySeq = ''
|
|
dlg = GetHelpSourceDialog(root, 'Get Help Source')
|
|
print dlg.result
|
|
Button(root,text='Dialog', command=run).pack()
|
|
root.mainloop()
|