首页 > 解决方案 > 在 BoxLayout 未使用的空间中绘制

问题描述

我想制作允许我在底部输入文本并允许我在屏幕的其余部分中绘制的 GUI。我能够使用 BoxLayout 在窗口底部制作文本框和按钮,但我不能使用剩余空间进行绘图。这是我的代码的输出:输出

下面是我的代码

import sys
import os
import kivy
kivy.require("1.10.0")
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.graphics import Line,Ellipse
from kivy.config import Config

Config.set('input', 'mouse', 'mouse,multitouch_on_demand')

class Draw(Widget):
    def on_touch_down(self,touch):
        print(touch)
        with self.canvas:
            touch.ud["line"]=Line(points=(touch.x,touch.y))
    def on_touch_move(self,touch):
        print(touch)
        with self.canvas:
            touch.ud["line"].points +=(touch.x,touch.y)
    def on_touch_up(self,touch):
        print("released mouse",touch)


class MAP(BoxLayout):    
    def __init__(self, **kwargs):
        super(MAP, self).__init__(**kwargs)        
        self.S=TextInput(multiline=False, size_hint=(800,0.05))
        self.add_widget(self.S)
        self.b=Button(text="OK",size_hint=(200,0.05))
        self.add_widget(self.b)
    Draw()






class GUI(App):
    def build(self):
        return MAP()

if __name__ == '__main__':
    print(Window.size)
    GUI().run()

标签: kivy

解决方案


您的Draw小部件进行绘图,但它从未添加到显示中。尝试将您的MAP课程更改为:

class MAP(BoxLayout):
    def __init__(self, **kwargs):
        super(MAP, self).__init__(**kwargs)
        self.S=TextInput(multiline=False, size_hint=(800,0.05))
        self.add_widget(self.S)
        self.b=Button(text="OK",size_hint=(200,0.05))
        self.add_widget(self.b)
        self.draw = Draw()
        self.add_widget(self.draw)
   # Draw()

请注意,流浪Draw()者已被注释掉(它没有做任何事情),并且Draw现在将小部件添加到MAP小部件中。


推荐阅读