我不太确定如何问这个问题,所以这才是最合理的。我有一个基于控制台的Python程序,可以模拟燃料存储和传输系统(schematic drawing)。
current program没什么特别的,仅使用阀门和泵实例来查看阀门是否打开/关闭,泵是否打开/关闭以及相关的设备流速和压力。
我正在寻找一个可以模拟人机界面的Kivy程序。在这种情况下,只需在阀门旁边使用简单的切换按钮即可显示阀门是打开还是关闭,以及泵的开或关状态。
我已经阅读过Kivy教程并阅读了Kivy的书,但是它们并不能回答我的问题,因为他们倾向于更专注于移动游戏,而不是面向桌面的应用程序。我已经弄清楚了如何在原理图中添加按钮,但是我不知道如何使.py / .kv文件与我现有的Python代码进行交互。我根本不想重写我现有的代码。
以下是我到目前为止所拥有的;它所做的就是在阀门1下方制作一个ToggleButton。按下该按钮时,该按钮会将单词“ pressed”发送到控制台输出。
hmi.py
import kivy
kivy.require("1.10.0")
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.config import Config
from kivy.uix.togglebutton import ToggleButton, ToggleButtonBehavior
Config.set("graphics", "width", "1062")
Config.set("graphics", "height", "849")
class HMI(FloatLayout):
pass
class HMIApp(App):
def build(self):
return HMI()
if __name__ == "__main__":
HMIApp().run()
hmi.kv
#:kivy 1.10.0
<HMIButton@ToggleButton>:
color: 1, 1, 1, 1
size_hint: (.01, .01)
<HMI>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: "fuel_schematic.png"
HMIButton:
id: _valve_1
text: "1"
pos: 360, 285
on_press: print("pressed")
我的主要问题是,在VirtualPLC.Models.FuelFarm.components.gate1和VirtualPLC.Models.FuelFarm.functionality.gate1_open()[以及close()]和将它们绑定到我添加到Kivy代码中的切换按钮上?
我可以简单地导入这些模块,还是必须将它们重写为Kivy程序?
答案 0 :(得分:1)
当您触摸或单击ToggleButton小部件时,状态在‘normal’
和‘down’
之间切换(与按下按钮的时间只有‘down’
相对)。 / p>
是的,您可以导入这些模块。
on_press
替换为on_state
事件,并将其绑定到回调方法并传递ToggleButton的实例,例如on_state: root.on_state(self)
。group:
,以便您知道它是哪个值。HMIButton:
id: _valve_1
text: "1"
pos: 360, 285
group: "valve1"
on_state: root.on_state(self)
在类HMI()中实现回调方法。
class HMI(FloatLayout):
def on_state(self, instance):
if instance.state == "down":
print(instance.group, "Opened")
else:
print(instance.group, "Closed")