我有一些不明白的事情,我希望有人可以解雇。我已经在这个主题上做了大量的阅读,但它似乎并没有在我的脑海中连接。
我的问题来自于将功能链接到kivy按钮。 现在我正在努力学习如何做一个简单的功能:
def Math():
print 1+1
我想做更复杂的事情:
def Math(a,b):
print a^2 + b^2
a
和b
是来自kivy的输入标签,点击按钮后会打印出答案。
这是我到目前为止所做的:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
#######``Logics``#######
class Math(FloatLayout):
def add(self):
print 1+1
#######``Windows``#######
class MainScreen(Screen):
pass
class AnotherScreen(Screen):
pass
class ScreenManagement(ScreenManager):
pass
presentation = Builder.load_file("GUI_Style.kv")
class MainApp(App):
def build(self):
return presentation
if __name__ == "__main__":
MainApp().run()
这是我的kivy语言文件:
import NoTransition kivy.uix.screenmanager.NoTransition
ScreenManagement:
transition: NoTransition()
MainScreen:
AnotherScreen:
<MainScreen>:
name: "main"
FloatLayout:
Button:
on_release: app.root.current = "other"
text: "Next Screen"
font_size: 50
color: 0,1,0,1
font_size: 25
size_hint: 0.3,0.2
pos_hint: {"right":1, "top":1}
<AnotherScreen>:
name: "other"
FloatLayout:
Button:
color: 0,1,0,1
font_size: 25
size_hint: 0.3,0.2
text: "add"
pos_hint: {"x":0, "y":0}
on_release: root.add
Button:
color: 0,1,0,1
font_size: 25
size_hint: 0.3,0.2
text: "Back Home"
on_release: app.root.current = "main"
pos_hint: {"right":1, "top":1}
答案 0 :(得分:1)
<AnotherScreen>:
name: "other"
FloatLayout:
Button:
...
on_release: root.add <-- here *root* evaluates to the top widget in the rule.
哪个是AnotherScreen实例,但它没有add
方法。
class Math(FloatLayout):
def add(self):
print 1+1
在这里,你通过继承FloatLayout
来宣告一个Math类,这是一个uix组件-a widget-。并且您在此类add
上定义了一个方法。你仍然没有使用它。在kv文件中,您使用了FloatLayout
。
现在,为了让您能够访问kv中的函数,大多数时候您可以使用root
/ self
或{app
/ #: import get_color_from_hex kivy.utils.get_color_from_hex
<ColoredWidget>:
canvas:
Color:
rgba: get_color_from_hex("DCDCDC")
Rectangle:
size: self.size
pos: self.pos
或{来访问它作为uix组件的方法{1}},你也可以导入它,例如:
<AnotherScreen>:
name: "other"
Math:
id: math_layout
Button:
...
on_release: math_layout.add()
所以你不能这样做:
class AnotherScreen(Screen):
def add(self):
print(1+1)
或者像这样:
{{1}}
如果您仍然无法保留此主题,我将很乐意提供更多帮助。