Python 基维:如何防止标签文本被旋转?

Python 基维:如何防止标签文本被旋转?,python,kivy,Python,Kivy,下面是旋转圆圈的代码,并将触碰和触碰移动计数显示为标签。代码将运行,但是,当我旋转圆圈(画布)时,标签正在旋转。我试图使标签居中,并防止标签旋转。我如何才能做到这一点?我如何使用碰撞方法来实现这一点?谢谢 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 impo

下面是旋转圆圈的代码,并将触碰和触碰移动计数显示为标签。代码将运行,但是,当我旋转圆圈(画布)时,标签正在旋转。我试图使标签居中,并防止标签旋转。我如何才能做到这一点?我如何使用碰撞方法来实现这一点?谢谢

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()
从kivy.app导入应用
从kivy.uix.label导入标签
从kivy.uix.widget导入widget
从kivy.lang导入生成器
从kivy.animation导入动画
从kivy.properties导入NumericProperty
从kivy.uix.boxlayout导入boxlayout
从kivy.config导入配置
从kivy.core.window导入窗口
Window.size=(781.274599)
输入数学
kv='''
画布:
轮换:
角度:root.angle
来源:自我中心
颜色:
rgb:255,0,0
行:
圆:自中心x,自中心y,112,19,自角度-180
宽度:11
颜色:
rgb:0,0255
行:
圆:自中心x、自中心y、112、19、自角度%180
宽度:11
颜色:
rgb:255255
行:
圆:self.center\u x,self.center\u y,200500,self.angle%45
宽度:10
颜色:
rgba:.1,1,1,9
行:
宽度:2
圆圈:
(自中心x,自中心y,最小值(自宽,自高)/8.5,)
颜色:
rgba:.502.502.502,1
椭圆:
职位:(850410)
尺寸:(214214)
'''
建筑商荷载(千伏)
类拨号(小部件):
定义初始(自我,**kwargs):
超级(拨号,自我)。\uuuuu初始化(**kwargs)
self.touch\u move\u count=0
self.touch\u down\u count=0
self.touch\u move\u Label=Label()
self.touch\u down\u Label=Label()
self.update_count()
self.add_小部件(self.touch_-down_标签)
self.add\u小部件(self.touch\u move\u标签)
角度=数值属性(0)
def更新计数(自身):
self.touch\u down\u Label.text=str(self.touch\u down\u计数)
self.touch\u move\u Label.text=str(self.touch\u move\u count)
def on_触控向下(自身,触控):
y=(touch.y-self.center[1])
x=(touch.x-self.center[0])
计算=数学学位(数学atan2(y,x))
self.prev_angle=如果计算>0,则计算;否则360+计算
self.tmp=self.angle
self.touch\u down\u count+=1
打印(自触式向下计数)
self.update_count()
def on_touch_move(自我,触摸):
y=(touch.y-self.center[1])
x=(touch.x-self.center[0])
计算=数学学位(数学atan2(y,x))
新角度=如果计算>0,则计算360+计算
self.angle=self.tmp+(新角度-自上角度)%360
self.touch\u move\u count+=1
打印(自触摸\移动\计数)
self.update_count()
类拨号应用程序(应用程序):
def生成(自):
返回拨号盘()
如果名称=“\uuuuu main\uuuuuuuu”:
DialApp().run()命令

旋转:
之前放置一个
推送矩阵:
,在小部件画布的末尾放置一个
PopMatrix:
。您可以查看文档,了解这些说明的作用以及为什么它们是合适的解决方案