python - 从单独的 python 线程更新 newt (snack.py) 接口
问题描述
我第一次更新列表时它工作得很好,从计时器我得到了最后一个文本项的不可选择的副本,即两个“第四”,但只有一个工作。我想异步更新我的蝾螈接口,但我的想法已经不多了。谢谢你。
from __future__ import absolute_import, print_function, unicode_literals
from snack import *
import subprocess
import time, threading
def time_counter():
global li
global screen
li.replace("PROBLEM below",2)
screen.refresh()
screen = SnackScreen()
li = Listbox(height = 35, width = 160, returnExit = 1)
li.append("First", 0)
li.append("Second", 1)
li.append("Third", 2)
li.append("Forth", 3)
bb = ButtonBar(screen, (("Ok", "ok"), ("Cancel", "cancel")),1)
g = GridForm(screen, "My Test", 1, 4)
g.add(li, 0, 0)
g.add(bb, 0, 3, growx = 1)
threading.Timer(2, time_counter).start()
li.replace("WORKS FINE",2)
g.runOnce()
screen.finish()
解决方案
明确删除和重新插入一个项目在原则上确实有效,但由于屏幕上的顺序在几次迭代后变得混乱,并不是真的。
因此,只需清除整个列表,更新项目并重新创建。
box_list = ["First", "Second", "Third", "Forth"]
...
cur=li.current()
box_list[cur]="NO PROBLEM"
li.clear();
for idx, val in enumerate(box_list):
li.append(val, idx)
li.setCurrent(cur)
推荐阅读
- javascript - 在javascript中获取大整数字符串
- flutter - 如何使用 fastlane 为 iOS 的每种导出方法构建一个颤振应用程序
- python-3.x - 如何将列表列表中的每个元素乘以一个数字?
- javascript - C# Websocket 远程方未完成关闭握手就关闭了WebSocket连接
- python - 从 excel 的 python 脚本运行一个函数而不运行整个脚本
- typescript - 在枚举上使用计算值
- android - Android - Recyclerview 中的 onBindViewHolder 内的 OnResume
- uml - 你如何显示对同一个类的多个函数调用?
- php - Laravel 显式路由模式绑定在某些情况下不起作用?
- xml - 无法使用 notepad++ 针对 XSD 验证 XML 文件