1
2# Demonstration of how you would create a new skin
3# from scratch
4
5import os
6
7try:
8    from Tkinter import *
9    from tkFileDialog import *
10except ImportError:
11    from tkinter import *
12    from tkinter.filedialog import *
13
14import Pmw
15
16from pmg_tk.skins import PMGSkin
17
18class Demo(PMGSkin):
19
20    def fileOpenDialog(self):
21        if not hasattr(self,'fileOpenPath'):
22            self.fileOpenPath = os.getcwd()
23        ofile_list = askopenfilename(initialdir = self.fileOpenPath,
24                                     filetypes=self.app.getLoadableFileTypes(),
25                                     multiple=1)
26        for ofile in ofile_list:
27            if len(ofile):
28                self.fileOpenPath = os.path.dirname(ofile)
29                self.cmd.load(ofile,quiet=0)
30
31    def quit(self):
32        self.cmd.log_close()
33        self.cmd.quit()
34
35    def createMenuBar(self):
36        self.menuBar = Pmw.MenuBar(self.root, # balloon=self.balloon,
37                                   hull_relief=RAISED, hull_borderwidth=1)
38        self.menuBar.pack(fill=X)
39
40        self.menuBar.addmenu('File', 'File Menu',tearoff=TRUE)
41
42        self.menuBar.addmenuitem('File', 'command', 'Open file',
43                                label='Open...',
44                                command=self.fileOpenDialog)
45
46        self.menuBar.addcascademenu('File', 'Skin', 'Skin',
47                                             label='Skin',tearoff=TRUE)
48
49        self.app.addSkinMenuItems(self.menuBar,'Skin')
50
51        self.menuBar.addmenuitem('File', 'command', 'Quit PyMOL',
52                                label='Quit',
53                                command=self.quit)
54
55    def destroyMenuBar(self):
56        self.menuBar.pack_forget()
57        self.menuBar.destroy()
58        del self.menuBar
59
60    def createInterface(self):
61
62        # create the menu bar
63        self.createMenuBar()
64
65    def setup(self):
66
67        # call the parent method
68        PMGSkin.setup(self)
69
70        # name the application
71        self.root.title("Demonstration PyMOL Skin")
72
73        # create the user interface
74        self.createInterface()
75
76        # pack the root window
77        self.app._hull.pack(side=TOP, anchor=CENTER, expand=NO, fill=NONE,
78                            padx=0, pady=0, ipadx=0, ipady=0)
79
80    def takedown(self):
81        self.destroyMenuBar()
82        PMGSkin.takedown(self)
83
84    def __init__(self,app):
85
86        PMGSkin.__init__(self,app)
87        self.app = app
88        self.pymol = app.pymol
89        self.cmd = app.pymol.cmd
90
91def __init__(app):
92    return Demo(app)
93
94