小编Psi*_*man的帖子

Android kivy 在哪里放置应用程序文件(ini、图像数据库等)

我已经使用 kivy 为 Android 创建了一个原型应用程序。它已在 buildozer 中编译,我已上传到 Android 设备。

但我不确定将应用程序相关文件(如 ini 文件、图像数据库等)放在哪里。

非常感谢任何帮助

[编辑 2020 07 25]

当我问这个问题时(许多个月前),我对 kivy 和 buildozer 的整个想法还是陌生的。

我没有意识到什么对初学者来说并不明显(见证这个问题被查看的次数)以及@inclement 的答案没有解决的是,Buildozer 将整个 python/kivy 项目包装成一个文件它可以包含您的所有静态数据。所以你只需要确保你的 buildozer 规范选择了它们。

android kivy buildozer

7
推荐指数
1
解决办法
2137
查看次数

可以用奇异码获得设备的物理尺寸吗?

有谁知道Kivy如何用不同的字体呈现文本?

我在16sp处有文字标签。

在屏幕尺寸为(1024、552)和(2048、1536)的平板电脑上,它可以完美工作(宽高比分别为1.855和1.333) 在此处输入图片说明

在屏幕大小为(1280,720)(比率1.778)的PC上,它也可以完美显示,但是在屏幕大小为该大小的手机上,字母会被截断 在此处输入图片说明

唯一的区别是设备的物理尺寸。因此看来,Kivy文本不是根据某些基于像素的算法绘制的,而是考虑了屏幕的物理尺寸

有什么方法可以确定Kivy的实际尺寸吗?因此,请允许我相应地调整字体大小。如果我使用较小的(10sp)字体,则文本在电话(小型设备)上正确显示,但是在大型设备上,文本显得太小。

python kivy

6
推荐指数
1
解决办法
2242
查看次数

wxPython wx.adv中的ImportError libSDL2-2.0.so.0

我正在运行 Ubuntu 18.04.3 LTS,Python 3.6.9,wx.version: 4.0.7.post2 gtk3 (phoenix) wxWidgets 3.0.5

当我导入 wx.adv 时,出现错误

导入错误:libSDL2-2.0.so.0:无法打开共享对象文件:没有这样的文件或目录

如果我运行:

sudo apt-file search  libSDL_image-1.2.so.0
Run Code Online (Sandbox Code Playgroud)

我得到:

libsdl-image1.2: /usr/lib/x86_64-linux-gnu/libSDL_image-1.2.so.0
libsdl-image1.2: /usr/lib/x86_64-linux-gnu/libSDL_image-1.2.so.0.8.4
Run Code Online (Sandbox Code Playgroud)

怎么了?

wxpython ubuntu-18.04

6
推荐指数
1
解决办法
3419
查看次数

使用ReadTheDocs主题阅读Docs&Sphinx时删除视图源链接

有没有办法从sphinx中删除"查看页面源"链接生成阅读文档主题页面?

在此输入图像描述

还有一个类似的问题在这里并建议寻找面包屑文件,但我无法找到一个

read-the-docs

5
推荐指数
2
解决办法
1246
查看次数

pyinstaller 无法看到 configparser

我在 python 应用程序中使用 configparser

当我运行应用程序时

python main.py
Run Code Online (Sandbox Code Playgroud)

有用。但是,如果我使用 pyinstall 创建 Windows exe,该 exe 将失败并显示消息

no module named 'configparser'
Run Code Online (Sandbox Code Playgroud)

然而,如屏幕截图所示,configparser 确实存在

这里发生了什么?

注意:如果从目录中删除 __init__.py,我不会收到错误

在此输入图像描述

[更多信息]

这似乎是“sys.path”问题。如果我将 configparser.py 复制到我的应用程序目录中,问题就会转移到我正在调用的另一个模块上

我应该更改我的 pyinstaller 规范文件吗?

# -*- mode: python -*-
a = Analysis(['main.py'],
             hiddenimports=[],
             hookspath=None,
             runtime_hooks=None)
a.datas = list({tuple(map(str.upper, t)) for t in a.datas})
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='test_imports.exe',
          debug=False,
          strip=None,
          upx=True,
          console=True)
Run Code Online (Sandbox Code Playgroud)

python pyinstaller configparser python-3.x

5
推荐指数
1
解决办法
4036
查看次数

带锚点的文档之间的链接

我有两个第一个文档,例如:

doc1.rst
doc2.rst
Run Code Online (Sandbox Code Playgroud)

文档1.rst

Doc 1 content
*************

Foo bar
=======

baz !
Run Code Online (Sandbox Code Playgroud)

文档2.rst

Doc 2 content
*************

You can see "foo bar" `here <doc1.html#foo-bar>`.
Run Code Online (Sandbox Code Playgroud)

要在 doc2 中有一个到 doc1#foo-bar 的链接,我可以对其进行硬编码。但是如何在不进行硬编码的情况下实现呢?我可以用 sphinx 代码做到这一点吗?

python-sphinx

3
推荐指数
1
解决办法
1923
查看次数

如何在 pyinstaller 中设置隐藏导入

我有一个包含多个包的大项目。这些包使用公共包中的一组模块。我正在尝试使用 pyinstaller 在 Windows 上创建 exe,但它找不到通用包。

这个被削减的项目也存在同样的问题。我的包的组织方式如下树所示:

在此输入图像描述

当我使用

python -m my_package

在顶部 my_package 目录中它运行良好。

my_package 中的模块 main.py 从 common 导入 Bar(位于 foo 中)。__init__.py 文件的共同点包括:

from common.source.foo import Bar

当我构建 exe 文件并在终端中运行它时,它失败并显示“没有名为 common 的模块”

我的 pyintstaller 规范包括:

hiddenimports=['../', '../common/', '../common/common/']

我应该尝试一些不同的东西吗?

python pyinstaller

3
推荐指数
1
解决办法
4043
查看次数

Kivy kv 文件的行为与 Builder.load_string 不同

我正在尝试在 kivy 上实现一个 2 屏幕应用程序。我遵循了他们的示例,如果在 main.py 中调用“Builder.load_string”,它就可以工作。

但是,如果我将其注释掉并创建一个 .kv 文件,我只会得到一个空白屏幕。我究竟做错了什么?

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

#Builder.load_string("""
#<MainScreen>:
    #BoxLayout:
        #Button:
            #text: 'Goto settings'
            #on_press: root.manager.current = 'settings'
        #Button:
            #text: 'Quit'

#<SettingsScreen>:
    #BoxLayout:
        #Button:
            #text: 'My settings button'
        #Button:
            #text: 'Back to menu'
            #on_press: root.manager.current = 'main'
#""")

# Declare both screens
class MainScreen(Screen):
    pass

class SettingsScreen(Screen):
    pass

# Create the screen manager
sm = ScreenManager()
sm.add_widget(MainScreen(name='main'))
sm.add_widget(SettingsScreen(name='settings'))

class TestApp(App):

    def build(self):
        return sm …
Run Code Online (Sandbox Code Playgroud)

python kivy

2
推荐指数
1
解决办法
5922
查看次数

与 Svelte 中的组件通信的最佳/最惯用的方式是什么?

我试图了解如何与 Svelte 组件进行通信。在我的应用程序中,我创建了两个组件。在其中一个Antescript.svelte中,我使用bind与 App.svelte 进行通信;在另一个Postscript.svelte中,我使用调度进行通信。

一种方法优于另一种方法吗?

我使用一个方法而不是另一个方法可能会遇到问题吗?

调度方法肯定需要更多编码,这是一个问题吗

REPL

应用程序.svelte

<h1>{antescript} {junction} {postscript}</h1>
<div>
    <AnteScript bind:antescript={antescript}/>
</div>
<div>
    <PostScript on:message={postscriptChanged} {postscript}/>
</div>

<script>
import AnteScript from "./AnteScript.svelte";
import PostScript from "./PostScript.svelte";
    
    let antescript = 'start';
    let junction = 'and';
    let postscript = 'finish';
    
    function postscriptChanged(event) {
        postscript = event.detail.text;
    }
</script>
Run Code Online (Sandbox Code Playgroud)

AnteScript.svelte

<input type="text" bind:value={antescript} />

<script>
    export let antescript;
</script>
Run Code Online (Sandbox Code Playgroud)

PostScript.svelte

<input id="postscript" type="text" on:input={textChanged} value={postscript}/>

<script>
    import { createEventDispatcher …
Run Code Online (Sandbox Code Playgroud)

svelte

2
推荐指数
1
解决办法
493
查看次数

如何让 Svelte 对变量的变化做出反应

我正在尝试让我的 Svelte 应用程序对数据存储中定义的字典的更改做出反应

在以下代码REPL中,当创建新项目时会调用createNewItem函数,并且用户存储会在该函数中的antepost显示之间更新,但即使user.options明显更改,也不会调用getOptions函数。问题是什么?

应用程序.svelete

<select bind:value={selectedOption}>
{#each user_options as option}
    <option value={option}>{option}</option>
{/each}
</select>

<button on:click={addNewItem}>New item</button>
<NewItem />

<script>
    import {user, state, elementDisplay } from './data'
import NewItem from "./NewItem.svelte";
    
$: user_options = getOptions($user.options);
$: new_item = createNewItem($state.new_item);
    
let selectedOption = "";
    
    function getOptions(user_options) {
        console.log('user changed')
        let options = []
        if (state.new_item != '') {
            user_options[$user.new_item] = ''
        }
        for (const [option, value] of Object.entries(user_options)) …
Run Code Online (Sandbox Code Playgroud)

svelte

2
推荐指数
1
解决办法
1376
查看次数

在python中创建互惠的dicts

我有一个共同的要求,即从值中查找代码,以及从代码中查找值.例如,我有一个颜色的词典,使我能够得到颜色的代码.另一方面,我可能有一个代码,并希望得到颜色.我通过创建我称之为互惠的词汇来解决这个问题.

colour_list = [["red", "0"], ["green", "1"], ["blue", "2"]]
colours = {}
codes = {}
for colour in colour_list:
    colours[colour[0]] = colour[1]
    codes[colour[1]] = colour[0]

print colours
print codes
Run Code Online (Sandbox Code Playgroud)

如果我知道一个代码,我可以看一下颜色代码,如果我知道我的颜色可以查找的代码的颜色.

这是解决此问题的最佳数据结构吗?有更多的pythonic方式吗?

python dictionary

1
推荐指数
1
解决办法
105
查看次数

如何删除 wagtail URL 中的“home”

我有一个 wagtail 项目,根目录有一个“主页”(slug='home')。

第二页“博客”是“主页”的子页面(slug='blog')。

最后,我有博客发布页面,它们是“博客”的子页面(slug='blog-post-1' 等)。

blog/models.py我有以下代码:

class BlogListingPage(Page):
    """List the Blog detail pages."""

    template = "blog/blog_listing_page.html"
    ....
    def get_context(self, request, *args, **kwargs):
        """Add custom content to our context."""
        context = super().get_context(request, *args, **kwargs)
        context['blog_pages'] = self.get_children().live()
        return context


class BlogDetailPage(Page):
    """Blog detail page."""
    template = "blog/blog_detail_page.html"
    ....
Run Code Online (Sandbox Code Playgroud)

要访问我使用的博客:

<a class="nav-link" href="/blog">Blog</a>
Run Code Online (Sandbox Code Playgroud)

这非常有效。

现在,详细信息页面的 URL 是/home/blog/blog-post-1/等,但该页面实际上位于/blog/blog-post-1/.

'/home' 来自哪里,我该如何摆脱它?

wagtail

1
推荐指数
1
解决办法
203
查看次数