以下是用于旋转圆圈并显示向下触摸和触摸移动计数作为标签的代码。代码将运行,但是标签随着我旋转圆圈(画布)而旋转。我正在尝试使标签居中并防止标签旋转,如何实现此目的?如何使用碰撞方法来实现此目的?谢谢
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.animation import Animation
from kivy.properties import NumericProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.config import Config
from kivy.core.window import Window
Window.size = (781.274, 599)
import math
kv = '''
<Dial>
canvas:
Rotate:
angle: root.angle
origin: self.center
Color:
rgb: 255,0,0
Line:
circle:self.center_x, self.center_y, 112, 19, self.angle % -180
width: 11
Color:
rgb: 0,0,255
Line:
circle:self.center_x, self.center_y, 112, 19, self.angle % 180
width: 11
Color:
rgb: 255,255,255
Line:
circle:self.center_x, self.center_y, 200, 500, self.angle % 45
width: 10
Color:
rgba: .1, 1, .1, .9
Line:
width: 2
circle:
(self.center_x, self.center_y, min(self.width, self.height)/ 8.5,)
Color:
rgba: .502,.502,.502,1
Ellipse:
pos: (850,410)
size: (214,214)
'''
Builder.load_string(kv)
class Dial(Widget):
def __init__(self, **kwargs):
super(Dial, self).__init__(**kwargs)
self.touch_move_count = 0
self.touch_down_count = 0
self.touch_move_Label = Label()
self.touch_down_Label = Label()
self.update_count()
self.add_widget(self.touch_down_Label)
self.add_widget(self.touch_move_Label)
angle = NumericProperty(0)
def update_count(self):
self.touch_down_Label.text = str(self.touch_down_count)
self.touch_move_Label.text = str(self.touch_move_count)
def on_touch_down(self, touch):
y = (touch.y - self.center[1])
x = (touch.x - self.center[0])
calc = math.degrees(math.atan2(y, x))
self.prev_angle = calc if calc > 0 else 360 + calc
self.tmp = self.angle
self.touch_down_count += 1
print(self.touch_down_count)
self.update_count()
def on_touch_move(self, touch):
y = (touch.y - self.center[1])
x = (touch.x - self.center[0])
calc = math.degrees(math.atan2(y, x))
new_angle = calc if calc > 0 else 360 + calc
self.angle = self.tmp + (new_angle - self.prev_angle) % 360
self.touch_move_count += 1
print(self.touch_move_count)
self.update_count()
class DialApp(App):
def build(self):
return Dial()
if __name__ == "__main__":
DialApp().run()
答案 0 :(得分:0)
在小部件的画布的PushMatrix:
之前放置一个Rotate:
,并在其末尾放置一个PopMatrix:
。您可以在此处查看文档,以查看这些说明的用途以及为什么它们是合适的解决方案。