首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基维:如何在输入的基础上连续旋转图像

基维:如何在输入的基础上连续旋转图像
EN

Stack Overflow用户
提问于 2018-03-30 02:46:42
回答 1查看 780关注 0票数 0

我正在使用一个覆盆子Pi来创建一个程序,一个舵反馈指示器在船上。

几乎一个电位器连接到舵,一个可变电压被发送到一个模拟到数字转换器连接到我的Pi。

我可以使用输入来显示我当前的舵角(以文本形式),但是我希望它能够旋转我必须充当刻度盘(或量规)的图像。

我想要的角度不断更新,并出现在GUI上。如何使函数返回到我的.KV文件中的旋转角度?

这将在程序第一次运行时工作,但不会在整个程序中更新。

代码语言:javascript
复制
class RudderAngle(Screen):
def __init__(self, **kwargs):
    super(RudderAngle, self).__init__(**kwargs)
    Clock.schedule_interval(self.Print_Rudder,0.02)
def Print_Rudder(self, *args):
    angle = mcp.read_adc(7)
    deg = angle/17.0
    dega = angle/17.0

    if deg<=30:
        ri = (30-deg)
        colour = [0, 1, 0, 1]
        angle = 90-dega*3
    if deg==30:
        ri = (0)
        colour = [0,0,0,1]
        angle = 0
    if deg>30:
        ri = (deg-30)
        colour = [1, 0, 0, 1]
        angle =-(dega*3)+90

    ri = math.floor(ri)
    ri = int(ri)
    ri = str(ri)

    rai = self.ids.rudderposition
    ind1 = self.ids.ind
    rai.text = ri
    rai.color = colour
    ind1.angle = angle
    return angle
代码语言:javascript
复制
FloatLayout:
        id: rudder_angle
        padding: 10

        canvas.before:
            Color:
                rgba: .95, 1, 1, 1
            Rectangle:
                pos: self.pos
                size: self.size

        Label:
            font_size: 100
            id: rudderposition
            text: '0'
            pos_hint: {"center_x": .5, "center_y": .6}
            background_color: (1, 1, 1, 1)


        Image:
            id: ind
            source: 'rai-pics/dial.png'
            size_hint: 1,1
            pos_hint: {"center_x": .5, "center_y": .5}
        Image:
            source: 'rai-pics/ri.png'
            size_hint: 0.7,0.5
            pos_hint: {"center_x": .5, "center_y": .5}
            canvas.before:
                PushMatrix
                Rotate:
                    #angle: root.Print_Rudder()
                    axis: 0, 0, 1
                    origin: root.center
            canvas.after:
                PopMatrix   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-30 03:07:54

对于这些情况,您必须创建一个属性并使用角度执行绑定,对于这种情况,使用的是NumericProperty

.py

代码语言:javascript
复制
...
from kivy.properties import NumericProperty


class RudderAngle(Screen):
    angle_of_rudder = NumericProperty()
    def __init__(self, **kwargs):
        super(RudderAngle, self).__init__(**kwargs)
        Clock.schedule_interval(self.Print_Rudder,0.02)

    def Print_Rudder(self, *args):
        ...
        ind1.angle = angle
        self.angle_of_rudder = angle

root = Builder.load_file("main.kv")

class TestApp(App):
    def build(self):
        return root

if __name__ == '__main__':
    TestApp().run()

main.kv

代码语言:javascript
复制
RudderAngle:
    name : 'screen'
    FloatLayout:
        id: rudder_angle
        padding: 10

        canvas.before:
            Color:
                rgba: 0.95, 1, 1, 1
            Rectangle:
                pos: self.pos
                size: self.size

        Label:
            font_size: 100
            id: rudderposition
            text: '0'
            pos_hint: {"center_x": .5, "center_y": .6}
            background_color: (1, 1, 1, 1)


        Image:
            id: ind
            source: 'rai-pics/dial.png'
            size_hint: 1,1
            pos_hint: {"center_x": .5, "center_y": .5}

        Image:
            source: 'rai-pics/ri.png'
            size_hint: 0.7,0.5
            pos_hint: {"center_x": .5, "center_y": .5}
            canvas.before:
                PushMatrix
                Rotate:
                    angle: root.angle_of_rudder
                    axis: 0, 0, 1
                    origin: root.center
            canvas.after:
                PopMatrix 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49567731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档