1

私はこれを行うのに苦労しています。写真の表示ボタンを実行するたびに、アプリ自体ではなく、Python スクリプトだけが表示されます。

以下の Python スクリプトを実行しようとしています。

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())`

下のボタンで

<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>
4

1 に答える 1

3

Python ファイルへの URL にバックスラッシュが含まれているため、何が間違っているのかを推測します。

Python は Web ブラウザーでは実行されません。そのため、HTML ファイルをハード ドライブから直接 (つまり、file://URL を使用して) ロードしている場合、ブラウザはソース コードを表示するだけです。

Python を実行するには、Web サーバーをセットアップする必要があります。サーバーに Python コードを実行させる方法は、サーバーによって異なります。また、おそらく Python コードを書き直したくなるでしょう。何年も事実上放棄されてきたCGI標準に合わせて書かれているようです。CGI は、HTML が「印刷」されるページが要求されるたびにプログラムを実行します。最新のシステムはコードを 1 回ロードし、ページが要求されるたびにコード内のメソッドを呼び出します。メソッドは HTML を返します。より一般的には、HTML とメタデータを含む「応答オブジェクト」を返します。

簡単に開始できる場所として、Flaskまたはcherrypyをチェックすることをお勧めします。

于 2013-04-04T06:39:17.537 に答える