##---------------------------------------------------------------------------## ## ## idle - configuration dialog ## elguavas ## ##---------------------------------------------------------------------------## """ configuration dialog """ from Tkinter import * import tkMessageBox class ConfigDialog(Toplevel): """ configuration dialog for idle """ def __init__(self,parent,title,configDict): """ configDict - dictionary of configuration items """ Toplevel.__init__(self, parent) self.configure(borderwidth=5) self.geometry("+%d+%d" % (parent.winfo_rootx()+20, parent.winfo_rooty()+30)) self.config=configDict #elguavas - config placeholders til config stuff completed self.bg=self.cget('bg') self.fg=None #no ugly bold default text font on *nix self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',) self.CreateWidgets() self.resizable(height=FALSE,width=FALSE) self.ChangePage() self.transient(parent) self.grab_set() self.protocol("WM_DELETE_WINDOW", self.Cancel) self.parent = parent self.framePages.focus_set() #key bindings for this dialog # self.bind('',self.Ok) #dismiss dialog self.bind('',self.CancelBinding) #dismiss dialog, no save self.bind('',self.SaveBinding) #dismiss dialog, save self.bind('',self.RevertBinding) #revert to defaults self.bind('',self.ChangePageBinding) self.bind('',self.ChangePageBinding) self.bind('',self.ChangePageBinding) self.bind('',self.ChangePageBinding) self.wait_window() def Cancel(self): self.destroy() def Save(self): pass def Revert(self): pass def ChangePage(self): self.pages[self.pageNum.get()].lift() self.title('Settings - '+self.pageButtons[self.pageNum.get()].cget('text')) def CancelBinding(self,event): self.Cancel() def SaveBinding(self,event): self.Save() def RevertBinding(self,event): self.Revert() def ChangePageBinding(self,event): pageKeys=('f','c','k','g') pos=0 for key in pageKeys: if event.char == key: self.pageNum.set(pos) self.ChangePage() return pos=pos+1 def CreateWidgets(self): self.framePages = Frame(self,borderwidth=2,relief=SUNKEN) frameActionButtons = Frame(self) framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN) #action buttons self.buttonRevert = Button(frameActionButtons,text='Revert', command=self.Revert,underline=0,takefocus=FALSE) self.buttonSave = Button(frameActionButtons,text='Save', command=self.Save,underline=0,takefocus=FALSE) self.buttonCancel = Button(frameActionButtons,text='Cancel', command=self.Cancel,takefocus=FALSE) #page buttons self.pageNum=IntVar() self.pageNum.set(0) buttonPageFonts = Radiobutton(framePageButtons,value=0,text='Fonts') buttonPageColours = Radiobutton(framePageButtons,value=1,text='Colours') buttonPageKeys = Radiobutton(framePageButtons,value=2,text='Keys') buttonPageGeneral = Radiobutton(framePageButtons,value=3,text='General') self.pageButtons=(buttonPageFonts,buttonPageColours, buttonPageKeys,buttonPageGeneral) for button in self.pageButtons: button.config(command=self.ChangePage,underline=0,takefocus=FALSE, indicatoron=FALSE,highlightthickness=0,variable=self.pageNum, selectcolor=self.bg,borderwidth=1) button.pack(side=LEFT) #pages framePageFonts=Frame(self.framePages) framePageColours=Frame(self.framePages) framePageKeys=Frame(self.framePages) framePageGeneral=Frame(self.framePages) self.pages=(framePageFonts,framePageColours,framePageKeys,framePageGeneral) #pageFonts Button(framePageFonts,text='fonts page test').pack(padx=30,pady=30) #pageColours Button(framePageColours,text='colours page test').pack(padx=60,pady=60) #pageKeys Button(framePageKeys,text='keys page test').pack(padx=90,pady=90) #pageGeneral Button(framePageGeneral,text='general page test').pack(padx=110,pady=110) #grid in framePages so we can overlap pages framePageButtons.grid(row=0,column=0,sticky=W) for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W)) self.buttonRevert.pack(side=LEFT,padx=5,pady=5) self.buttonSave.pack(side=LEFT,padx=5,pady=5) self.buttonCancel.pack(side=LEFT,padx=5,pady=5) frameActionButtons.pack(side=BOTTOM) self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH) if __name__ == '__main__': #test the dialog root=Tk() Button(root,text='Dialog', command=lambda:ConfigDialog(root,'Settings',None)).pack() root.mainloop()