我刚开始使用Kivy作为我的应用程序而且我遇到了问题。 我尝试清理我的画布,但我不能将按钮与画布相关联
class DrawInput(Widget):
def on_touch_down(self, touch):
print(touch)
with self.canvas:
touch.ud["line"] = Line(points=(touch.x, touch.y), width=100)
def on_touch_move(self, touch):
#print(touch)
touch.ud["line"].points += (touch.x, touch.y)
def on_touch_up(self, touch):
self.export_to_png("roy.png")
print("RELEASED!", touch)
def cleaner(self):
self.canvas.clear()
class AnotherScreen(Screen):
pass
presentation = Builder.load_file("main2.kv")
class MainApp(App):
def build(self):
return presentation
def clear_canvas(self, obj):
MainApp()。运行()
这是main2.kv
GridLayout:
cols: 2
Button:
on_release: root.change_text()
color: 0,1,0,1
font_size: 25
size_hint: 0.3,0.2
text: root.random_number
pos_hint: {"right":1, "top":1}
DrawInput
Button:
on_release: root.clean()
color: 0,1,0,1
font_size: 25
size_hint: 0.3,0.2
text: "Clear"
我的问题是我需要从其他课程调用Clean方法,但是当我尝试它时,它说我需要发送" Self",有人能帮助我吗? 只是试图清理与DrawInput相关的画布
答案 0 :(得分:1)
您必须使用ObjectProperty连接DrawInput子窗口小部件以引用clean方法。有关详细信息,请参阅以下示例。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Line
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
class DrawInput(Widget):
def on_touch_down(self, touch):
print(touch)
with self.canvas:
touch.ud["line"] = Line(points=(touch.x, touch.y), width=100)
def on_touch_move(self, touch):
#print(touch)
touch.ud["line"].points += (touch.x, touch.y)
def on_touch_up(self, touch):
# self.export_to_png("roy.png")
self.export_to_png("kivy-logo-black-64.png")
print("RELEASED!", touch)
def cleaner(self):
print("cleaner: ", self)
self.canvas.clear()
class FirstScreen(Screen):
draw = ObjectProperty()
class AnotherScreen(Screen):
pass
class Manager(ScreenManager):
mgr = ObjectProperty()
def change_text(self):
pass
def random_number(self):
pass
def clean(self):
print("clean: ", self)
self.mgr.draw.cleaner()
class TestApp(App):
def build(self):
return Manager()
if __name__ == "__main__":
TestApp().run()
#:kivy 1.10.0
<DrawInput>:
<Manager>:
mgr: first_screen
FirstScreen:
id: first_screen
AnotherScreen:
<FirstScreen>:
draw: draw_input
GridLayout:
cols: 2
Button:
on_release: app.root.change_text()
color: 0,1,0,1
font_size: 25
size_hint: 0.3, 0.2
# text: app.root.random_number()
text: "123"
pos_hint: {"right":1, "top":1}
DrawInput:
id: draw_input
Button:
on_release: app.root.clean()
color: 0,1,0,1
font_size: 25
size_hint: 0.3, 0.2
text: "Clear"
<AnotherScreen>: