我是Kivy的初学者,我正在尝试为python app创建gui。 我有一个在python中编程的后端,单独工作(键盘作为输入),现在我想要kivy的前端。我有两个问题: - 如何一次运行两个组件(后端和前端)? - 如何在后端共享现有类的对象以在前端显示信息(kivy)?
classtest.py
class Test(object):
def __init__(self, attr):
self.attr = attr
gui.py
class LoginScreen(GridLayout):
def __init__(self, **kwargs):
super(LoginScreen, self).__init__(**kwargs)
self.cols = 2
self.add_widget(Label(text='User Name'))
self.username = TextInput(multiline=False)
self.add_widget(self.username)
self.add_widget(Label(text='password'))
self.password = TextInput(password=True, multiline=False)
self.add_widget(self.password)
print self.username.text
class Login(App):
def build(self):
Window.borderless = True
return LoginScreen()
main.py
import classtest, gui
users = ['user_name1', 'user_name2', 'user_name3']
gui.Login().run()
for u in users:
test = classtest.Test(u) # this should update the user text field on the windows login automatically, but how?
在示例中,如何在实例属性值更改时更新登录窗口的元素?
多次感谢!
答案 0 :(得分:0)
它不会更新因为...循环:P Kivy为每个App().run()
或类似的“run”命令启动一个循环并且你的:
for u in users:
test = classtest.Test(u)
在循环后写入。所以基本上它甚至不会在你的应用程序运行时执行。只需将print('something')
放入for
循环,您就会看到。
示例:
while True:
<do something>
<change a variable in that loop> # == nope
对你来说意味着你需要:
gui.py
文件或 第二个选项还取决于何时使用该类。如果在主循环之外,那么您现在处于相同的情况,因此 - 在Test()
内使用gui.py
。
在应用运行时,您将无法在run()
之后使用任何代码。也许有一些肮脏的伎俩,但那只会给你带来麻烦。您编写的代码可用于某些“清理”,您也可以在App.on_stop
方法(主循环内)中执行此操作。