小编kiy*_*yui的帖子

如何从线程更新Kivy元素?

我有一个套接字客户端,View()每次收到消息时都会调用一个类.我已经以这样的方式拆分我的代码,以便这个类可以简单地使用print()或任何其他显示方法,如我所愿.然而,似乎Kivy并不喜欢这种方法.我已经BoxLayout为我的观点扩展了Kivy的课程并且可以调用该message()函数.该类看起来像这样:

class View(BoxLayout):
    def __init__(self, **kwargs):
        super(View, self).__init__(**kwargs)
        self.btn = Button(text='Default')
        # Bind button press method
        self.btn.bind(on_press=self.message)
        self.add_widget(self.btn)
    def message(self, message):
        self.btn.text = 'Meow'
        self.add_widget(Button(text='Meow'))
        print(str(message))
Run Code Online (Sandbox Code Playgroud)

确实调用了消息函数并打印但接口未更新.然而,当我按下按钮时,它会更新界面以及打印.

我已经研究过使用a StringProperty来修改按钮文本但是也失败了.就像一张纸条,如果我正在做的事情是完全不可行的,我试图稍后绘制一个由width * height按钮组成的整个界面,以棋盘的形式.

任何输入都非常感激,这让我疯狂.


编辑1* 我接下来发表了一些评论并尝试了一些方法.我添加了一个Clock类,让它安排一个update()方法View.update方法只是更改了一些元素的文本.我注意到它在我安排时有效,如下所示:

def update(self, *args, **kwargs):
    self.btn.text = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase) for i in range(32))
def message(self, message):
    try:
        print(message)
        self.text = 'sending'
    except Exception as e:
        print(e)
Run Code Online (Sandbox Code Playgroud)

线程现在只是分配文本属性,如图所示message().定期触发的 …

python python-multithreading kivy

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

在 Windows 应用商店应用程序中递归获取文件和文件夹

以前在 Windows 窗体应用程序中,就是我递归搜索文件夹中所有文件的方式。我知道 Windows 应用商店应用程序几乎是沙盒化的,但是必须有一种方法可以获取已知文件夹目录中的所有文件。我一直在尝试使用音乐目录来做到这一点。但是,它对我不起作用。我已经完成了谷歌搜索,但找不到任何说明如何实现这一目标的线程。我尝试了以下代码:

private async void dirScan(string dir)
    {
        var folDir = await StorageFolder.GetFolderFromPathAsync(dir);
        foreach (var d in await folDir.GetFoldersAsync())
        {
            foreach(var f in await d.GetFilesAsync())
            {
                knownMusicDir.Add(f.Path.ToString());
            }
            dirScan(d.ToString());
        }
    }
Run Code Online (Sandbox Code Playgroud)

我希望有人可以看看我的代码并希望能更正它。提前致谢!

c# recursion file windows-runtime windows-store-apps

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