Я работаю с учебником калькулятора от Real Python и хочу масштабировать холст моего дочернего виджета Label всякий раз, когда ширина родительского виджета меньше, чем texture_size в моем виджете Label. В моем коде мой Lable находится в макете, и поэтому его положение и размер основаны на его родителе.
Я беру некоторый код в KvLang, который хорошо масштабирует дочерний виджет , и реализую его в Python, чтобы лучше понять кодирование с помощью Kivy.
Всякий раз, когда изменяется положение родительского виджета, я вызываю метод check_canvas () моего ребенка для запуска его инструкций canvas, и там я вызываю Scale, но, похоже, ничего не делать с текстом в моем ярлыке.
Как изменить размер холста myTextInput с помощью Scale в Python коде? (Я намеренно избегаю KvLang)
Вот часть моего кода, которая включает в себя то, что я пытаюсь выполнить sh
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.graphics import PushMatrix,PopMatrix,Scale
class myTextInput(Label):
def __init__(self, **kwargs):
super(myTextInput,self).__init__(**kwargs)
def check_canvas(self):
if self.texture_size[0] < self.width:
self._scale = 1
else:
self._scale = float(self.width) / self.texture_size[0]
self.text = 'my scale text here (%d, %.2f)' % (self.width, self._scale)
with self.canvas.before:
PushMatrix()
Scale(
origin = self.center,
x = self._scale or 1,
y = self._scale or 1
)
with self.canvas.after:
PopMatrix()
class MainApp(App):
def build(self):
self.operators = ["/", "*", "+", "-"]
self.last_was_operator = None
self.last_button = None
main_layout = BoxLayout(orientation="vertical")
self.solution = myTextInput(font_size= main_layout.height * 0.5)
def callback_size(instance, value):
print('The widget', instance, 'sized to', value)
print('The widget', instance, 'texture_size[0] is', instance.texture_size[0])
#What I have noted here is that the texture_size[0] and size
#are responsive but not _scale and canvas operations.
#I made check_canvas() to 'enforce' a check on _scale and canvas operation but
#although now I see _scale changing, canvas operations are not showing any result
instance.check_canvas()
print('The widget', instance, '_scale is', instance._scale)
self.solution.bind(size = callback_size)
main_layout.add_widget(self.solution)