python - 在 Kivy 中更改窗口大小时如何更改小部件的大小?
问题描述
我是一个尝试做计算器的python初学者。我需要帮助解决一个问题。当我运行应用程序并通过拖动鼠标调整窗口大小时,小部件不会调整到窗口的大小并且位于窗口的末尾。我试图返回 FloatLayout 而不是 KalkulackaLayout 类,它以我想要的方式工作。但是当我返回类 KalkulackaLayout 时,它不起作用,我需要返回这个类。
蟒蛇文件:
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.widget import Widget
class KalkulackaLayout(Widget):
def button_cislo(self, cislo):
pred = self.ids.kalkulacka_input.text
if pred == "0":
self.ids.kalkulacka_input.text = ""
self.ids.kalkulacka_input.text = f"{cislo}"
else:
self.ids.kalkulacka_input.text = f"{pred}{cislo}"
def znamenko(self, znamenko):
pred = self.ids.kalkulacka_input.text
self.ids.kalkulacka_input.text = f"{pred}{znamenko}"
def vymazat(self):
self.ids.kalkulacka_input.text = ""
def vypocitej(self):
pred = self.ids.kalkulacka_input.text
try:
vysledek = eval(pred)
self.ids.kalkulacka_input.text = str(vysledek)
except:
self.ids.kalkulacka_input.text = "ERROR!"
pass
class Kalkulacka(App):
def build(self):
return KalkulackaLayout()
if __name__=="__main__":
Kalkulacka().run()
.kv 文件:
<KalkulackaLayout>
FloatLayout:
size:300,300
Button:
text: "1"
size_hint:0.5,0.5
pos_hint: {"bottom":0.1}
on_press: root.button_cislo(1)
Button:
text: "2"
size_hint:0.5,0.5
pos_hint:{"right": 1, "bottom": 0.1}
on_press: root.button_cislo(2)
Button:
text: "3"
size_hint:0.5,0.5
pos_hint:{"right": 1.5, "bottom": 0.1}
on_press: root.button_cislo(3)
Button:
text: "÷"
size_hint:0.5,0.5
pos_hint:{"right": 2, "bottom": 0.1}
on_press: root.znamenko("/")
Button:
text: "-"
size_hint:0.5,0.5
pos_hint:{"right": 2.5, "bottom": 0.1}
on_press: root.znamenko("-")
Button:
text: "4"
size_hint:0.5,0.5
pos_hint:{"top": 1}
on_press: root.button_cislo(4)
Button:
text: "5"
size_hint:0.5,0.5
pos_hint:{"right": 1, "top": 1}
on_press: root.button_cislo(5)
Button:
text: "6"
size_hint:0.5,0.5
pos_hint:{"right": 1.5, "top": 1}
on_press: root.button_cislo(6)
Button:
text: "x"
size_hint:0.5,0.5
pos_hint:{"right": 2, "top": 1}
on_press: root.znamenko("*")
Button:
text: "+"
size_hint:0.5,0.5
pos_hint:{"right": 2.5, "top": 1}
on_press: root.znamenko("+")
Button:
text: "7"
size_hint:0.5,0.5
pos_hint:{"top": 1.5}
on_press: root.button_cislo(7)
Button:
text: "8"
size_hint:0.5,0.5
pos_hint:{"right": 1, "top": 1.5}
on_press: root.button_cislo(8)
Button:
text: "9"
size_hint:0.5,0.5
pos_hint:{"right": 1.5, "top": 1.5}
on_press: root.button_cislo(9)
Button:
text: "="
size_hint:0.5,0.5
pos_hint:{"right": 2, "top": 1.5}
on_press: root.vypocitej()
Button:
text: "C"
size_hint:0.5,0.5
pos_hint:{"right": 2.5, "top": 1.5}
on_press: root.vymazat()
TextInput:
text: ""
size_hint: 2.667,0.25
font_size: 60
pos_hint: {"top":2, "right":2.667}
id: kalkulacka_input
解决方案
class KalkulackaLayout(Widget):
不是从 Widget 继承,而是从像BoxLayout
这样的布局类继承,当它自己的大小发生变化时,它会自动重新定位其子级。
推荐阅读
- vb.net-2010 - 如何解决 VB.NET 使用 sqldatabase 在位置 2 处没有行
- excel - Excel - 基于重复模式中的多个条件对依赖值求和
- docker - 使用私有 gitlab 存储库时如何验证 docker build
- java - 移动文件导致文件名中带有路径分隔符“/”的文件
- php - 即使在注销后也会设置会话 ID
- java - Java 解析未格式化为数组的 JSONList
- ruby-on-rails - Rails 5 对更新的验证也会在创建时触发
- javascript - 禁用外部库设置的事件监听器
- android - RecyclerView 中的 Cardview 选择多张卡片,而不仅仅是一张
- python - 从没有句号的文本中提取句子