所以我们走了。我正在开发一个有趣的项目,其目的是登录界面(标准用户名/密码输入):
class LoginDisplay(npyscreen.Form):
def create(self):
self.name = Config.welcome_message
self.wgUsername = self.add(npyscreen.TitleText, name="Username :")
self.wgPassword = self.add(TitlePassword, name="Password :")
def beforeEditing(self):
self.parentApp.unlog_user()
self.wgUsername.value = ""
self.wgPassword.value = ""
def afterEditing(self):
self.parentApp.log_user(self.wgUsername.value, self.wgPassword.value)
听起来很酷,工作正常。
我的问题是我正在使用其他方式使用NFC阅读器登录。代码很简单:
def badge(myApp):
""" Target function of a Thread """
device = serial.Serial('/dev/ttyUSB0',timeout=60)
device.setTimeout(1)
buff = ''
while myApp.isAlive:
s = device.read(1)
if s == '':
sleep(1)
elif s == '\r' :
# buff var containing the badge id
myApp.login_by_badge(buff)
else:
buff = buff + s
因此,如果登录正确,目标是更改当前表单(当前表单),如下所示:
class MyApplication(npyscreen.NPSAppManaged):
# .../...
def log_user(self, username, password):
if self._valid_login(username, password):
self.switchForm("ANOTHER_FORM")
def login_by_badge(self, badge_id):
if self._valid_badge(badge_id):
self.switchForm("ANOTHER_FORM")
当然,在子线程中切换表单的确如此。我深入了解资料来源,看起来图书馆npyscreen
绝对不是为这类事物设计的。
问题:我应该实现我拥有的windgets,表单和应用程序的一部分来管理它,还是有一种常见的方法来处理npyscreen
中的线程交互?
答案 0 :(得分:1)
我是npyscreen的作者。
您应该查看使用最新版本中添加的事件系统。我添加了部分内容,允许您在线程之间发送消息。