1

I'm having a hard time doing this. Every time when i run the view photo button all it shows is the python script and not the apps itself.

I'm trying to run the Python script below:

from os.path import join, dirname, exists
from pymt import *
current_dir = dirname(__file__)
fontname_title=join(current_dir,'fonts','7.ttf')
fontname_author_desc=join(current_dir,'fonts','author_desc.ttf')

css='''
.desktop-background,
.desktop-coverflow {
draw-background: 1;
bg-color: #000000;
}
.desktop-author,
.desktop-description {
color: #999999;
}
.desktop-title {
font-size: 60;
}
'''


css_add_sheet(css)

class Desktop(MTBoxLayout):
layout_def = '''
<MTBoxLayout orientation='"vertical"' cls='"desktop-background"'>
    <MTCoverFlow size_hint='(1, .7)' cls='"desktop-coverflow"'
        thumbnail_size='(256, 256)' cover_distance='150' id='"coverflow"'/>
    <MTAnchorLayout size_hint='(1, .3)'>
        <MTBoxLayout cls='"form"' padding='20' orientation='"vertical"'>
            <MTLabel id='"title"' label='"Unknown Title"' autosize='True'
                cls='"desktop-title"' anchor_x='"center"'/>
            <MTLabel id='"author"' label='"Unknown Author"' autosize='True'
                cls='"desktop-author"' anchor_x='"center"'/>
            <MTLabel id='"description"' label='"Unknown Description"' autosize='True'
                cls='"desktop-description"' anchor_x='"center"'/>
        </MTBoxLayout>
    </MTAnchorLayout>
</MTBoxLayout>
'''

def __init__(self, **kwargs):
    super(Desktop, self).__init__(**kwargs)
    self.xml = xml = XMLWidget(xml=Desktop.layout_def)
    self.xml.autoconnect(self)
    self.add_widget(self.xml.root)
    self.coverflow = xml.getById('coverflow')
    self.title = xml.getById('title')
    self.author = xml.getById('author')
    self.description = xml.getById('description')
    self.title.font_name=fontname_title
    self.author.font_name=fontname_author_desc
    self.description.font_name=fontname_author_desc
    self.populate()



def populate(self):
    # search plugins
    self.plugins = plugins = MTPlugins(plugin_paths=[
        join(current_dir, 'app')])
    plugins.search_plugins()

    # populate the coverflow with plugin list
    first_entry = None
    for key in plugins.list():
        plugin = plugins.get_plugin(key)
        infos = plugins.get_infos(plugin)

        icon = None
        for icon_filename in ('icon-large.png', 'icon-large.jpg',
                              infos['icon'], 'icon.png'):
            icon = join(infos['path'], icon_filename)
            if exists(icon):
                break
            icon = None

        # no icon ?
        if icon is None:
            print 'No icon found for', infos['title']
            continue

        # create an image button for every plugin
        button = MTImageButton(filename=icon)
        if first_entry is None:
            first_entry = button
        button.infos = infos
        button.plugin = plugin
        self.coverflow.add_widget(button)

    # display first entry
    if first_entry:
        self.show_plugin(first_entry)

def on_coverflow_change(self, widget):
    '''Called when the coverflow widget is changed
    '''
    self.show_plugin(widget)

def on_coverflow_select(self, widget):
    '''Called when the coverflow widget have a selection
    '''
    plugin = widget.plugin
    win = self.parent
    self.plugins.activate(plugin, self.parent)
    btn_close = MTImageButton(filename=join(current_dir,'icons','home.png'))
    btn_close.connect('on_release', curry(
            self.on_plugin_close, self.parent, plugin))
    self.parent.add_widget(btn_close)
    self.parent.remove_widget(self)

def on_plugin_close(self, win, plugin, *largs):
    '''Called when the close button is hitted
    '''
    self.plugins.deactivate(plugin, win)
    win.children.clear()
    win.add_widget(self)

def show_plugin(self, widget):
    '''Show information about a plugin in the container
    '''
    self.title.label = widget.infos['title']
    self.author.label = widget.infos['author']
    self.description.label = widget.infos['description']

if __name__ == '__main__':
runTouchApp(Desktop())`

With the button below

<html>
        <div class="art-blockcontent">
    <p style="text-align: center;"><img width="176" height="132" alt="" src="images/boat.jpg"></p>
<p style="text-align: center;">&nbsp;
<a href="Python\pictures\malacca.py" class="art-button">View Photo</a>&nbsp;<br></p></div>
</html>

1 Answer 1

3

Since you have backslashes in your URL to your python file I'm going to take a guess as to what you're doing wrong.

Python won't run in your web browser. So if you're loading the HTML file straight off your hard drive (i.e. using a file:// URL) then the browser will just show your source code.

You need to set up a web server to run the python. How you get the server to run the python code depends on the server. And you'll probably want to re-write your python code. It appears to be written to the CGI standard which has been effectively abandoned for many years. CGI runs a program each time a page is requested with the HTML being "printed" -- because it launches a new process each time it is painfully slow. Modern systems load the code once and then call a method in your code every time a page is requested, with the method returning the HTML, or more generally a "response object" which contains the HTML and metadata.

I'd recommend checking out Flask or cherrypy as easy places to start.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.