kivy - 在 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()
解决方案
您的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
小部件中。
推荐阅读
- node.js - 使用 Nightwatch.js 上传动作
- python - Bitshift Int Color 回到 RGB
- csv - Spark:写入时避免任务重启
- python - 在python中设计一个猜数字列表的游戏时遇到麻烦
- visual-studio - Visual Studio 选项卡作为单独的窗口自行分离
- android - 如何从可序列化的对象中获取值
- mysql - sql server 中的@@error ,Mysql server 中的替代品
- python-3.x - 如何组装使用附加指令解析 reStructuredText 的工具
- sql - SQL查询:如何将整数更改为布尔值
- reactjs - 从文本字段更新头像值