回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我刚刚开始学习Kivy,我试图理解<code>Canvas</code>指令在调整kivyApp窗口大小时是如何受到影响的</p>
<p>在Kivy文档中提到——</p>
<pre><code>Note
Kivy drawing instructions are not automatically relative to the position or size of the widget. You, therefore, need to consider these factors when drawing. In order to make your drawing instructions relative to the widget, the instructions need either to be declared in the KvLang or bound to pos and size changes.
</code></pre>
<p><a href="https://kivy.org/doc/stable/guide/widgets.html#adding-widget-background" rel="nofollow noreferrer">example which follows</a>显示了如何将<code>Rectangle</code>指令的大小和位置绑定到正在绘制它的小部件的大小和位置。因此,调整窗口大小时,大小和位置会成比例地改变</p>
<p>但是,对于像<code>Bezier</code>指令这样使用<code>points</code>的东西,我怎么能做同样的事情呢</p>
<p>我有一个自定义小部件<code>HangManFig1</code>,它扩展了<code>Widget</code>类,该类在<code>KVlang</code>中定义如下:</p>
<pre><code><HangManFig1>:
canvas:
Line:
points: (150, 100, 150, 700)
width: 10
Line:
points: (150, 700, 600, 700)
width: 10
Line:
points: (150, 600, 250, 700)
width: 10
Line:
points: (600, 700, 600, 600)
width: 3
Ellipse:
pos: (550, 500)
Line:
bezier: (610, 510, 630, 400, 570, 350)
width: 10
Line:
bezier: (570, 350, 510, 370, 450, 270)
width: 10
Line:
bezier: (570, 350, 600, 300, 550, 200)
width: 10
Line:
bezier: (610, 480, 530, 430, 500, 430)
width: 10
Line:
bezier: (610, 480, 630, 500, 680, 390)
width: 10
</code></pre>
<p>我以<code>Screen</code>的方式使用这个小部件,方式如下:</p>
<pre><code>#:import HangManFig1 figures.hangmanfig1
<MainScreen>:
name: '_main_screen_'
BoxLayout:
RelativeLayout:
size_hint_x: 0.7
HangManFig1:
RelativeLayout:
size_hint_x: 0.3
Button:
text: 'Play'
pos_hint: {'x': 0.1, 'y': 0.80}
size_hint: (0.8, 0.1)
on_release:
root.manager.transition.direction = 'left'
root.manager.current = '_game_screen_'
Button:
text: 'Practice'
pos_hint: {'x': 0.1, 'y': 0.60}
size_hint: (0.8, 0.1)
on_release:
root.manager.transition.direction = 'left'
root.manager.current = '_game_screen_'
Button:
text: 'Share'
pos_hint: {'x': 0.1, 'y': 0.40}
size_hint: (0.8, 0.1)
on_release:
root.manager.transition.direction = 'left'
root.manager.current = '_share_screen_'
Button:
text: 'Credits'
pos_hint: {'x': 0.1, 'y': 0.20}
size_hint: (0.8, 0.1)
on_release:
root.manager.transition.direction = 'left'
root.manager.current = '_credits_screen_'
</code></pre>
<p><a href="https://i.stack.imgur.com/agLWe.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/agLWe.png" alt="KivyApp in full screen"/></a></p>
<p>当我调整窗口的大小时,我看到虽然<code>Buttons</code>的位置正确,但没有<code>HangManFig1</code></p>
<p><a href="https://i.stack.imgur.com/W1RUz.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/W1RUz.jpg" alt="Enter image description here"/></a></p>
<p>是否有一种方法可以将此小部件的大小绑定到父小部件的大小,以便即使窗口大小发生变化,它也能正确定位</p>