aboutDialog.py:
1. Add additional buttons for Python Copyright and Credits 2. Use the Python LICENSE file instead of the old IDLE LICENSE.txt 3. Add additional buttons for IDLE's README and NEWS 4. Implement a method to read text from a _Printer object 5. Rename the Ok button to Close 6. Clean up to conform to Python code formatting standards textView.py: 1. Change background to white on all platforms 2. Increase height of frame 3. Add an optional parameter to textViewer to allow inserting text into the viewer instead of reading a file. 4. Rename the Ok button to Close Modified Files: aboutDialog.py textView.py
This commit is contained in:
parent
f31cb0cbcf
commit
09cb74ba20
@ -1,5 +1,5 @@
|
|||||||
"""
|
"""About Dialog for IDLE
|
||||||
about box for idle
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from Tkinter import *
|
from Tkinter import *
|
||||||
@ -8,107 +8,129 @@ import textView
|
|||||||
import idlever
|
import idlever
|
||||||
|
|
||||||
class AboutDialog(Toplevel):
|
class AboutDialog(Toplevel):
|
||||||
"""
|
"""Modal about dialog for idle
|
||||||
modal about dialog for idle
|
|
||||||
"""
|
"""
|
||||||
def __init__(self,parent,title):
|
def __init__(self,parent,title):
|
||||||
Toplevel.__init__(self, parent)
|
Toplevel.__init__(self, parent)
|
||||||
self.configure(borderwidth=5)
|
self.configure(borderwidth=5)
|
||||||
self.geometry("+%d+%d" % (parent.winfo_rootx()+30,
|
self.geometry("+%d+%d" % (parent.winfo_rootx()+30,
|
||||||
parent.winfo_rooty()+30))
|
parent.winfo_rooty()+30))
|
||||||
self.bg="#707070"
|
self.bg = "#707070"
|
||||||
self.fg="#ffffff"
|
self.fg = "#ffffff"
|
||||||
|
|
||||||
self.CreateWidgets()
|
self.CreateWidgets()
|
||||||
self.resizable(height=FALSE,width=FALSE)
|
self.resizable(height=FALSE, width=FALSE)
|
||||||
self.title(title)
|
self.title(title)
|
||||||
self.transient(parent)
|
self.transient(parent)
|
||||||
self.grab_set()
|
self.grab_set()
|
||||||
self.protocol("WM_DELETE_WINDOW", self.Ok)
|
self.protocol("WM_DELETE_WINDOW", self.Ok)
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.buttonOk.focus_set()
|
self.buttonOk.focus_set()
|
||||||
#key bindings for this dialog
|
|
||||||
self.bind('<Alt-c>',self.CreditsButtonBinding) #credits button
|
|
||||||
self.bind('<Alt-l>',self.LicenseButtonBinding) #license button
|
|
||||||
self.bind('<Return>',self.Ok) #dismiss dialog
|
self.bind('<Return>',self.Ok) #dismiss dialog
|
||||||
self.bind('<Escape>',self.Ok) #dismiss dialog
|
self.bind('<Escape>',self.Ok) #dismiss dialog
|
||||||
self.wait_window()
|
self.wait_window()
|
||||||
|
|
||||||
def CreateWidgets(self):
|
def CreateWidgets(self):
|
||||||
frameMain = Frame(self,borderwidth=2,relief=SUNKEN)
|
frameMain = Frame(self, borderwidth=2, relief=SUNKEN)
|
||||||
frameButtons = Frame(self)
|
frameButtons = Frame(self)
|
||||||
frameButtons.pack(side=BOTTOM,fill=X)
|
frameButtons.pack(side=BOTTOM, fill=X)
|
||||||
frameMain.pack(side=TOP,expand=TRUE,fill=BOTH)
|
frameMain.pack(side=TOP, expand=TRUE, fill=BOTH)
|
||||||
self.buttonOk = Button(frameButtons,text='Ok',
|
self.buttonOk = Button(frameButtons, text='Close',
|
||||||
command=self.Ok)#,default=ACTIVE
|
command=self.Ok)
|
||||||
self.buttonOk.pack(padx=5,pady=5)
|
self.buttonOk.pack(padx=5, pady=5)
|
||||||
#self.picture = Image('photo',data=self.pictureData)
|
#self.picture = Image('photo', data=self.pictureData)
|
||||||
frameBg = Frame(frameMain,bg=self.bg)
|
frameBg = Frame(frameMain, bg=self.bg)
|
||||||
frameBg.pack(expand=TRUE,fill=BOTH)
|
frameBg.pack(expand=TRUE, fill=BOTH)
|
||||||
labelTitle = Label(frameBg,text='IDLEfork',fg=self.fg,bg=self.bg,
|
labelTitle = Label(frameBg, text='IDLE', fg=self.fg, bg=self.bg,
|
||||||
font=('courier', 24, 'bold'))
|
font=('courier', 24, 'bold'))
|
||||||
labelTitle.grid(row=0,column=0,sticky=W,padx=10,pady=10)
|
labelTitle.grid(row=0, column=0, sticky=W, padx=10, pady=10)
|
||||||
#labelPicture = Label(frameBg,text='[picture]')
|
#labelPicture = Label(frameBg, text='[picture]')
|
||||||
#image=self.picture,bg=self.bg)
|
#image=self.picture, bg=self.bg)
|
||||||
#labelPicture.grid(row=0,column=1,sticky=W,rowspan=2,padx=0,pady=3)
|
#labelPicture.grid(row=1, column=1, sticky=W, rowspan=2,
|
||||||
labelVersion = Label(frameBg,text='version '+idlever.IDLE_VERSION,
|
# padx=0, pady=3)
|
||||||
fg=self.fg,bg=self.bg)
|
byline = "Python's Integrated DeveLopment Environment" + 5*'\n'
|
||||||
labelVersion.grid(row=1,column=0,sticky=W,padx=10,pady=5)
|
labelDesc = Label(frameBg, text=byline, justify=LEFT,
|
||||||
labelDesc = Label(frameBg,
|
fg=self.fg, bg=self.bg)
|
||||||
text="A development version of Python's lightweight\n"+
|
labelDesc.grid(row=2, column=0, sticky=W, columnspan=3, padx=10, pady=5)
|
||||||
'Integrated DeveLopment Environment, IDLE.',
|
labelEmail = Label(frameBg, text='email: idle-dev@python.org',
|
||||||
justify=LEFT,fg=self.fg,bg=self.bg)
|
justify=LEFT, fg=self.fg, bg=self.bg)
|
||||||
labelDesc.grid(row=2,column=0,sticky=W,columnspan=3,padx=10,pady=5)
|
|
||||||
labelCopyright = Label(frameBg,
|
|
||||||
text="Copyright (c) 2001 - 2003 Python Software Foundation\nAll Rights Reserved",
|
|
||||||
justify=LEFT,fg=self.fg,bg=self.bg)
|
|
||||||
labelCopyright.grid(row=3,column=0,sticky=W,columnspan=3,padx=10,pady=5)
|
|
||||||
labelLicense = Label(frameBg,
|
|
||||||
text='Released under the Python 2.3 PSF License',
|
|
||||||
justify=LEFT,fg=self.fg,bg=self.bg)
|
|
||||||
labelLicense.grid(row=4,column=0,sticky=W,columnspan=3,padx=10,pady=5)
|
|
||||||
Frame(frameBg,height=5,bg=self.bg).grid(row=5,column=0)
|
|
||||||
labelEmail = Label(frameBg,text='email: idle-dev@python.org',
|
|
||||||
justify=LEFT,fg=self.fg,bg=self.bg)
|
|
||||||
labelEmail.grid(row=6,column=0,columnspan=2,sticky=W,padx=10,pady=0)
|
labelEmail.grid(row=6,column=0,columnspan=2,sticky=W,padx=10,pady=0)
|
||||||
labelWWW = Label(frameBg,text='www: http://idlefork.sourceforge.net',
|
labelWWW = Label(frameBg, text='www: http://www.python.org/idle/',
|
||||||
justify=LEFT,fg=self.fg,bg=self.bg)
|
justify=LEFT, fg=self.fg, bg=self.bg)
|
||||||
labelWWW.grid(row=7,column=0,columnspan=2,sticky=W,padx=10,pady=0)
|
labelWWW.grid(row=7, column=0, columnspan=2, sticky=W, padx=10, pady=0)
|
||||||
Frame(frameBg,borderwidth=1,relief=SUNKEN,
|
Frame(frameBg, borderwidth=1, relief=SUNKEN,
|
||||||
height=2,bg=self.bg).grid(row=8,column=0,sticky=EW,
|
height=2, bg=self.bg).grid(row=8, column=0, sticky=EW,
|
||||||
columnspan=3, padx=5, pady=5)
|
columnspan=3, padx=5, pady=5)
|
||||||
labelPythonVer = Label(frameBg,text='Python version: '+
|
labelPythonVer = Label(frameBg, text='Python version: ' + \
|
||||||
sys.version.split()[0],fg=self.fg,bg=self.bg)
|
sys.version.split()[0], fg=self.fg, bg=self.bg)
|
||||||
labelPythonVer.grid(row=9,column=0,sticky=W,padx=10,pady=0)
|
labelPythonVer.grid(row=9, column=0, sticky=W, padx=10, pady=0)
|
||||||
#handle weird tk version num in windoze python >= 1.6 (?!?)
|
# handle weird tk version num in windoze python >= 1.6 (?!?)
|
||||||
tkVer = `TkVersion`.split('.')
|
tkVer = `TkVersion`.split('.')
|
||||||
tkVer[len(tkVer)-1] = str('%.3g' % (float('.'+tkVer[len(tkVer)-1])))[2:]
|
tkVer[len(tkVer)-1] = str('%.3g' % (float('.'+tkVer[len(tkVer)-1])))[2:]
|
||||||
if tkVer[len(tkVer)-1] == '':
|
if tkVer[len(tkVer)-1] == '':
|
||||||
tkVer[len(tkVer)-1] = '0'
|
tkVer[len(tkVer)-1] = '0'
|
||||||
tkVer = string.join(tkVer,'.')
|
tkVer = string.join(tkVer,'.')
|
||||||
labelTkVer = Label(frameBg,text='Tk version: '+
|
labelTkVer = Label(frameBg, text='Tk version: '+
|
||||||
tkVer,fg=self.fg,bg=self.bg)
|
tkVer, fg=self.fg, bg=self.bg)
|
||||||
labelTkVer.grid(row=9,column=1,sticky=W,padx=2,pady=0)
|
labelTkVer.grid(row=9, column=1, sticky=W, padx=2, pady=0)
|
||||||
|
py_button_f = Frame(frameBg, bg=self.bg)
|
||||||
self.buttonLicense = Button(frameBg,text='View License',underline=5,
|
py_button_f.grid(row=10, column=0, columnspan=2, sticky=NSEW)
|
||||||
width=14,highlightbackground=self.bg,command=self.ShowLicense)#takefocus=FALSE
|
buttonLicense = Button(py_button_f, text='License', width=8,
|
||||||
self.buttonLicense.grid(row=10,column=0,sticky=W,padx=10,pady=10)
|
highlightbackground=self.bg,
|
||||||
self.buttonCredits = Button(frameBg,text='View Credits',underline=5,
|
command=self.ShowLicense)
|
||||||
width=14,highlightbackground=self.bg,command=self.ShowCredits)#takefocus=FALSE
|
buttonLicense.pack(side=LEFT, padx=10, pady=10)
|
||||||
self.buttonCredits.grid(row=10,column=1,columnspan=2,sticky=E,padx=10,pady=10)
|
buttonCopyright = Button(py_button_f, text='Copyright', width=8,
|
||||||
|
highlightbackground=self.bg,
|
||||||
def CreditsButtonBinding(self,event):
|
command=self.ShowCopyright)
|
||||||
self.buttonCredits.invoke()
|
buttonCopyright.pack(side=LEFT, padx=10, pady=10)
|
||||||
|
buttonCredits = Button(py_button_f, text='Credits', width=8,
|
||||||
def LicenseButtonBinding(self,event):
|
highlightbackground=self.bg,
|
||||||
self.buttonLicense.invoke()
|
command=self.ShowPythonCredits)
|
||||||
|
buttonCredits.pack(side=LEFT, padx=10, pady=10)
|
||||||
|
Frame(frameBg, borderwidth=1, relief=SUNKEN,
|
||||||
|
height=2, bg=self.bg).grid(row=11, column=0, sticky=EW,
|
||||||
|
columnspan=3, padx=5, pady=5)
|
||||||
|
idle_v = Label(frameBg, text='IDLE version ' + idlever.IDLE_VERSION,
|
||||||
|
fg=self.fg, bg=self.bg)
|
||||||
|
idle_v.grid(row=12, column=0, sticky=W, padx=10, pady=0)
|
||||||
|
idle_button_f = Frame(frameBg, bg=self.bg)
|
||||||
|
idle_button_f.grid(row=13, column=0, columnspan=3, sticky=NSEW)
|
||||||
|
idle_about_b = Button(idle_button_f, text='README', width=8,
|
||||||
|
highlightbackground=self.bg,
|
||||||
|
command=self.ShowIDLEAbout)
|
||||||
|
idle_about_b.pack(side=LEFT, padx=10, pady=10)
|
||||||
|
idle_news_b = Button(idle_button_f, text='NEWS', width=8,
|
||||||
|
highlightbackground=self.bg,
|
||||||
|
command=self.ShowIDLENEWS)
|
||||||
|
idle_news_b.pack(side=LEFT, padx=10, pady=10)
|
||||||
|
idle_credits_b = Button(idle_button_f, text='Credits', width=8,
|
||||||
|
highlightbackground=self.bg,
|
||||||
|
command=self.ShowIDLECredits)
|
||||||
|
idle_credits_b.pack(side=LEFT, padx=10, pady=10)
|
||||||
|
|
||||||
def ShowLicense(self):
|
def ShowLicense(self):
|
||||||
self.ViewFile('About - License','LICENSE.txt')
|
self.display_printer_text(license, 'About - License')
|
||||||
|
|
||||||
def ShowCredits(self):
|
def ShowCopyright(self):
|
||||||
|
self.display_printer_text(copyright, 'About - Copyright')
|
||||||
|
|
||||||
|
def ShowPythonCredits(self):
|
||||||
|
self.display_printer_text(credits, 'About - Python Credits')
|
||||||
|
|
||||||
|
def ShowIDLECredits(self):
|
||||||
self.ViewFile('About - Credits','CREDITS.txt')
|
self.ViewFile('About - Credits','CREDITS.txt')
|
||||||
|
|
||||||
|
def ShowIDLEAbout(self):
|
||||||
|
self.ViewFile('About - Readme', 'README.txt')
|
||||||
|
|
||||||
|
def ShowIDLENEWS(self):
|
||||||
|
self.ViewFile('About - NEWS', 'NEWS.txt')
|
||||||
|
|
||||||
|
def display_printer_text(self, printer, title):
|
||||||
|
printer._Printer__setup()
|
||||||
|
data = '\n'.join(printer._Printer__lines)
|
||||||
|
textView.TextViewer(self, title, None, data)
|
||||||
|
|
||||||
def ViewFile(self,viewTitle,viewFile):
|
def ViewFile(self,viewTitle,viewFile):
|
||||||
fn=os.path.join(os.path.abspath(os.path.dirname(__file__)),viewFile)
|
fn=os.path.join(os.path.abspath(os.path.dirname(__file__)),viewFile)
|
||||||
textView.TextViewer(self,viewTitle,fn)
|
textView.TextViewer(self,viewTitle,fn)
|
||||||
@ -117,10 +139,10 @@ class AboutDialog(Toplevel):
|
|||||||
self.destroy()
|
self.destroy()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
#test the dialog
|
# test the dialog
|
||||||
root=Tk()
|
root = Tk()
|
||||||
def run():
|
def run():
|
||||||
import aboutDialog
|
import aboutDialog
|
||||||
aboutDialog.AboutDialog(root,'About')
|
aboutDialog.AboutDialog(root,'About')
|
||||||
Button(root,text='Dialog',command=run).pack()
|
Button(root, text='Dialog', command=run).pack()
|
||||||
root.mainloop()
|
root.mainloop()
|
||||||
|
@ -1,12 +1,7 @@
|
|||||||
##---------------------------------------------------------------------------##
|
"""Simple text browser for IDLE
|
||||||
##
|
|
||||||
## idle - simple text view dialog
|
|
||||||
## elguavas
|
|
||||||
##
|
|
||||||
##---------------------------------------------------------------------------##
|
|
||||||
"""
|
|
||||||
simple text browser for idle
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from Tkinter import *
|
from Tkinter import *
|
||||||
import tkMessageBox
|
import tkMessageBox
|
||||||
|
|
||||||
@ -14,17 +9,19 @@ class TextViewer(Toplevel):
|
|||||||
"""
|
"""
|
||||||
simple text viewer dialog for idle
|
simple text viewer dialog for idle
|
||||||
"""
|
"""
|
||||||
def __init__(self,parent,title,fileName):
|
def __init__(self, parent, title, fileName, data=None):
|
||||||
"""
|
"""If data exists, load it into viewer, otherwise try to load file.
|
||||||
fileName - string,should be an absoulute filename
|
|
||||||
|
fileName - string, should be an absoulute filename
|
||||||
"""
|
"""
|
||||||
Toplevel.__init__(self, parent)
|
Toplevel.__init__(self, parent)
|
||||||
self.configure(borderwidth=5)
|
self.configure(borderwidth=5)
|
||||||
self.geometry("+%d+%d" % (parent.winfo_rootx()+10,
|
self.geometry("=%dx%d+%d+%d" % (625, 500,
|
||||||
parent.winfo_rooty()+10))
|
parent.winfo_rootx() + 10,
|
||||||
|
parent.winfo_rooty() + 10))
|
||||||
#elguavas - config placeholders til config stuff completed
|
#elguavas - config placeholders til config stuff completed
|
||||||
self.bg=None
|
self.bg = '#ffffff'
|
||||||
self.fg=None
|
self.fg = '#000000'
|
||||||
|
|
||||||
self.CreateWidgets()
|
self.CreateWidgets()
|
||||||
self.title(title)
|
self.title(title)
|
||||||
@ -36,7 +33,10 @@ class TextViewer(Toplevel):
|
|||||||
#key bindings for this dialog
|
#key bindings for this dialog
|
||||||
self.bind('<Return>',self.Ok) #dismiss dialog
|
self.bind('<Return>',self.Ok) #dismiss dialog
|
||||||
self.bind('<Escape>',self.Ok) #dismiss dialog
|
self.bind('<Escape>',self.Ok) #dismiss dialog
|
||||||
self.LoadTextFile(fileName)
|
if data:
|
||||||
|
self.textView.insert(0.0, data)
|
||||||
|
else:
|
||||||
|
self.LoadTextFile(fileName)
|
||||||
self.textView.config(state=DISABLED)
|
self.textView.config(state=DISABLED)
|
||||||
self.wait_window()
|
self.wait_window()
|
||||||
|
|
||||||
@ -51,16 +51,17 @@ class TextViewer(Toplevel):
|
|||||||
self.textView.insert(0.0,textFile.read())
|
self.textView.insert(0.0,textFile.read())
|
||||||
|
|
||||||
def CreateWidgets(self):
|
def CreateWidgets(self):
|
||||||
frameText = Frame(self)
|
frameText = Frame(self, relief=SUNKEN, height=700)
|
||||||
frameButtons = Frame(self)
|
frameButtons = Frame(self)
|
||||||
self.buttonOk = Button(frameButtons,text='Ok',
|
self.buttonOk = Button(frameButtons, text='Close',
|
||||||
command=self.Ok,takefocus=FALSE,default=ACTIVE)
|
command=self.Ok, takefocus=FALSE)
|
||||||
self.scrollbarView = Scrollbar(frameText,orient=VERTICAL,
|
self.scrollbarView = Scrollbar(frameText, orient=VERTICAL,
|
||||||
takefocus=FALSE,highlightthickness=0)
|
takefocus=FALSE, highlightthickness=0)
|
||||||
self.textView = Text(frameText,wrap=WORD,highlightthickness=0)
|
self.textView = Text(frameText, wrap=WORD, highlightthickness=0,
|
||||||
|
fg=self.fg, bg=self.bg)
|
||||||
self.scrollbarView.config(command=self.textView.yview)
|
self.scrollbarView.config(command=self.textView.yview)
|
||||||
self.textView.config(yscrollcommand=self.scrollbarView.set)
|
self.textView.config(yscrollcommand=self.scrollbarView.set)
|
||||||
self.buttonOk.pack(padx=5,pady=5)
|
self.buttonOk.pack()
|
||||||
self.scrollbarView.pack(side=RIGHT,fill=Y)
|
self.scrollbarView.pack(side=RIGHT,fill=Y)
|
||||||
self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH)
|
self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH)
|
||||||
frameButtons.pack(side=BOTTOM,fill=X)
|
frameButtons.pack(side=BOTTOM,fill=X)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user