Kivy 清除文本输入
在本节中,我们将创建一个文本字段和一个用于清除文本字段内容的按钮。
对于文本字段,导入 textinput 模块:
from kivy.uix.textinput import TextInput
让我们创建一个 BoxLayout 来在我们的类中添加我们的小部件。
self.box = BoxLayout(orientation='horizontal', spacing=20, pos=(0,550))
现在我们要创建一个输入字段:
self.txt = TextInput(hint_text="Write here",size_hint=(.5,.1))
在输入字段之后,我们必须创建一个按钮来清除我们的文本。
为此,我们将创建一个 clearText 方法,将文本设置为空字符串,我们将在按下按钮时调用此方法,即使用按钮的 on_press 属性。
因此,当我们按下按钮时,文本将被擦除。
self.btn = Button(text='Clear All', on_press=self.clearText,size_hint=(.1,.1))
现在我们必须将小部件(输入字段和按钮)添加到 boxlayout 中:
self.box.add_widget(self.txt) self.box.add_widget(self.btn)
ClearText 方法如下所示:
def clearText(self, instance): self.txt.text = ''
整个代码将是这样的:
from kivy.app import App from kivy.uix.button import Button from kivy.uix.textinput import TextInput from kivy.uix.boxlayout import BoxLayout class ClearApp(App): def build(self): self.box = BoxLayout(orientation='horizontal', spacing=20) self.txt = TextInput(hint_text='Write here', size_hint=(.5,.1)) self.btn = Button(text='Clear All', on_press=self.clearText, size_hint=(.1,.1)) self.box.add_widget(self.txt) self.box.add_widget(self.btn) return self.box def clearText(self, instance): self.txt.text = '' ClearApp().run()
Kivy 滚动视图 ScrollView
Kivy 中的 ScrollView 提供了一个可滚动的视图。
使用 scrollview,我们可以在屏幕上滚动 x 轴和 y 轴。
首先,我们将导入一个名为 runTouchApp() 的新函数。
此功能将使我们的滚动视图启用触摸功能。
from kivy.base import runTouchApp
我们将定义 scrollView 如下:
from kivy.base import runTouchApp from kivy.lang import Builder root = Builder.load_string(r''' ScrollView: Label: text: 'Scrollview Example' * 100 font_size: 30 size_hint_x: 1.0 size_hint_y: None text_size: self.width, None height: self.texture_size[1] ''') runTouchApp(root)
画布图片
要将图片添加到画布,我们将创建一个与画布大小相等的矩形,然后在矩形上添加图像。
kvWidget 字符串将如下所示:
from kivy.app import App from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout kvWidget = """ MyWidget: orientation: 'vertical' canvas: Rectangle: size: self.size pos: self.pos source: 'images.jpg' """ class MyWidget(BoxLayout): def __init__(self, **kwargs): super().__init__(**kwargs) class CanvasApp(App): def build(self): return Builder.load_string(kvWidget) CanvasApp().run()
Kivy帆布
我们可以在画布内绘制我们想要的内容。
在本节中,我们将学习创建画布以及如何在画布上绘制矩形。
我们将在 boxlayout 中创建一个画布,然后在画布上创建一个矩形。
导入以下模块:
import kivy from kivy.app import App from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout
考虑下面的代码来创建一个画布:
kvWidget = """ MyWidget: orientation: 'vertical' canvas: Color: rgb: (255, 0, 0) Rectangle: size: self.size pos: self.pos """ class MyWidget(BoxLayout): def __init__(self, **kwargs): super().__init__(**kwargs)
在这段代码中,我们有一个名为 MyWidget 的 BoxLayout 类。
现在 kvWidget 字符串定义了一个带有 color 属性的画布和一个与 BoxLayout 具有相同大小和位置的矩形。
完整的代码将是这样的:
from kivy.app import App from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout kvWidget = """ MyWidget: orientation: 'vertical' canvas: Color: rgb: (255, 128, 0) Rectangle: size: self.size pos: self.pos """ class MyWidget(BoxLayout): def __init__(self, **kwargs): super().__init__(**kwargs) class CanvasApp(App): def build(self): return Builder.load_string(kvWidget) CanvasApp().run()
图形用户界面
在本节中,我们将学习如何创建和运行 Kivy 程序以及如何在 Kivy 中构建基本界面。
让我们创建一个扩展名为 .py 的文件。
要创建 Kivy 界面,我们首先需要使用以下语句导入 Kivy 应用模块:
from kivy.app import App
现在从 kivy.uix.label 导入标签:
from kivy.uix.label import Label
现在是编写我们的主程序的时候了。
class FirstKivy(App): def build(self): return Label(text="Hello Kivy!")
要构建应用程序,我们必须在 build() 函数上返回一个小部件。
在上面的代码中,我们返回了一个带有文本“Hello Kivy”的标签。
最后一步是调用这个函数。
我们可以创建类的对象,也可以只编写以下语句:
FirstKivy().run()
整个python文件如下所示:
from kivy.app import App from kivy.uix.label import Label class FirstKivy(App): def build(self): return Label(text="Hello Kivy!") FirstKivy().run()
第一个 Kivy 应用程序运行成功。
安装
由于 Kivy 在使用 pip 安装时需要编译,因此,我们需要wheel,它是已编译包的预构建发行版。
我们也可以使用 git 安装 Kivy,但在本教程中,我们将使用 Wheel。
运行以下命令来安装 pip 和 wheel:
python -m pip install --upgrade pip wheel setuptools
安装依赖项:
python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
然后:
python -m pip install kivy.deps.gstreamer
为 Kivy 安装依赖项后,使用以下命令安装 Kivy:
python –m pip install kivy
Kivy标签
我们可以使用标签向我们的 GUI 添加文本。
Kivy 标签仅支持 ASCII 和 Unicode 字符串。
更改字体大小
我们可以使用 font_size 属性更改标签的字体大小:
from kivy.app import App from kivy.uix.button import Label class KivyButton(App): def build(self): return Label(text="Hello Label", font_size='30') KivyButton().run()
为标签中的文本添加样式
在本节中,我们将更改标签中文本的样式。
例如,粗体、斜体、更改颜色、下划线等使用标记。
Label(text='[u][color=ff0066][b]Better days[/b][/color] are coming; They are called [i][color=ff9933]Saturday[/i] and [i]Sunday[/color][/i][/u]', markup = True)
其中
[color][/color]
用于为字体着色。
from kivy.app import App from kivy.uix.button import Label class KivyLabel(App): def build(self): return Label(text='[u][color=ff0066][b]Welcome[/b][/color] To [i][color=ff9933]Like[/i]Geeks[/color][/u]', markup = True) KivyLabel().run()
Kivy 是一个开源的 Python 库;我们可以使用它在 Windows、Linux、macOS、Android 和 iOS 上创建应用程序。
我们将讨论如何使用 Kivy 按钮、标签、回收视图、滚动视图、Kivy Canvas 和其他小部件来熟悉库。
我们可以使用称为 Kv 语言的中间语言设计 Kivy 小部件,稍后我们将看到。
Kivy时钟
我们可以使用 Kivy 时钟对象在特定时间间隔后安排函数调用。
在本节中,我们将创建一个按钮。
作为使用 Kivy 时钟的示例,我们将每 2 秒更改一次按钮的文本。
首先导入以下模块:
from kivy.app import App from kivy.clock import Clock from kivy.uix.button import Button
现在,创建一个类并初始化一个计数器变量,如下所示:
class ClockExample(App): i = 0
现在,创建一个按钮并使用 clock.schedule_interval 我们将每 2 秒调用一次用户定义的函数。
每次调用该函数时,计数器变量的值都会增加 1,该值会打印在按钮上。
def build(self): self.mybtn = Button(text='Number of Calls') Clock.schedule_interval(self.Clock_Callback, 2) return self.mybtn def Clock_Callback(self, dt): self.i = self.i+1 self.mybtn.text = "Call = %d"%self.i
dt 参数用于在调度和调用回调函数之间经过的时间。
如果没有传递参数,它会抛出一个关于回调函数的错误,它接受一个位置参数,但给出了两个。
完整的代码如下所示:
from kivy.app import App from kivy.uix.button import Button from kivy.clock import Clock class ClockExample(App): i=0 def build(self): self.mybtn = Button(text='Number of Calls') Clock.schedule_interval(self.clock_callback, 2) return self.mybtn def clock_callback(self, dt): self.i+= 1 self.mybtn.text = "Call = %d" % self.i ClockExample().run()
Kivy按钮
在本节中,我们将学习如何创建按钮、更改按钮颜色、启用/禁用、如何在按钮上添加图像以及如何更改其大小和位置。
导入并创建按钮:
from kivy.app import App from kivy.uix.button import Button class FirstKivy(App): def build(self): return Button(text="Welcome to onitroad!") FirstKivy().run()
更改 Kivy 按钮的颜色
Kivy 按钮的默认颜色是灰色。
我们可以通过在格式 (r, g, b, a) 中指定 background_color 属性来更改颜色。
from kivy.app import App from kivy.uix.button import Button class KivyButton(App): def build(self): return Button(text="Welcome to onitroad!", background_color=(155,0,51,53)) KivyButton().run()
禁用 Kivy 按钮
要禁用按钮,我们必须将 disabled 属性设置为 True。
mybtn.disabled = True
示例:
from kivy.uix.button import Button from kivy.app import App from functools import partial class KivyButton(App): def disable(self, instance, *args): instance.disabled = True def update(self, instance, *args): instance.text = "I am Disabled!" def build(self): mybtn = Button(text="Click me to disable") mybtn.bind(on_press=partial(self.disable, mybtn)) mybtn.bind(on_press=partial(self.update, mybtn)) return mybtn KivyButton().run()
KivyButton() 类是使用两个自定义方法创建的。
第一种方法是 disable() 方法。
然后我们有 update() 方法在点击按钮后更新按钮的文本。
此外,我们可以根据需要命名函数。
下一个函数是 build() 函数。
创建按钮时,此方法会自动运行。
然后我们使用 partial 调用了 disable() 方法。
类似地,调用 update() 方法来更新按钮被禁用后的文本。
disable() 函数的返回值绑定到我们按钮的 on_press 函数。
因此,当按钮被按下时,它首先被禁用,然后更新文本。
改变大小和位置
使用按钮小部件的 pos 和 size_hint 属性,我们可以轻松地分别更改按钮的位置和大小。
修改Kivy 按钮的大小和位置示例:
from kivy.app import App from kivy.uix.button import Button class KivyButton(App): def build(self): return Button(text="Welcome to onitroad!", pos=(300,350), size_hint = (.25, .18)) KivyButton().run()
pos 参数指定按钮的位置,而 size_hint 参数指定按钮的大小。
Kivy Button 中的图像
在本节中,我们将学习向按钮添加图像。
我们将首次使用 Kv 语言来创建我们的小部件,而不是从代码中实例化它们。
下面是我们要导入的 Kivy 库:
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.lang import Builder
BoxLayout 用于定位小部件,以便小部件可以以有组织的方式放置在一起。
在 Kivy 中,可以使用多种布局来组织小部件,例如,框布局、锚点布局、浮动布局等。
加载 Kv 字符串或者文件
默认情况下,Kivy 会尝试加载与类同名的 Kv 文件,但不包含 App 一词且小写。
如果类是 TestApp ,那么它将在同一目录中搜索名为 test.kv 的 Kv 文件以从中加载小部件。
另一种使用 Kivy Builder 加载 kv 文件的方法。
Kivy Builder 用于从 Kv 字符串或者文件加载小部件。
例如,如果你想创建一个小部件,你可以像这样使用构建器:
Builder.load_string(""" """)
在三引号内,添加了所需的小部件及其属性。
在下面的示例中,我们添加了一个 KivyButton 类。
首先设置按钮的文本和大小,然后在源属性和图像坐标中指定图像。
Builder.load_string(""" <KivyButton>: Button: text: "Hello Button!" size_hint: .12, .12 Image: source: 'images.jpg' center_x: self.parent.center_x center_y: self.parent.center_y """)
现在,让我们导入这个定义并运行我们的类:
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.lang import Builder Builder.load_string(""" <KivyButton>: Button: text: "Hello Button!" size_hint: .12, .12 Image: source: 'images.jpg' center_x: self.parent.center_x center_y: self.parent.center_y """) class KivyButton(App, BoxLayout): def build(self): return self KivyButton().run()
同样,我们可以使用 load_file 方法从单独的文件加载 Kv 字符串,如下所示:
Builder.load_file("myfile.kv")
此处的文件包含所有 Kivy 小部件定义。
Kivy RecycleView
假设我们有大量要在屏幕上显示的小部件,这可能会影响性能。
RecycleView 的目标是在屏幕上排列视图组。
RecycleView 是内存高效的,因为它根据屏幕的大小将内容加载到内存中,不像 ListView,所有项目都加载到内存中。
RecycleView 的关键特性之一是它支持动画。
RecycleView 可以创建交互式且高效的可滚动列表。
要使用 RecycleView,我们需要从 recycleview 模块中导入 RecycleView,如下所示:
from kivy.uix.recycleview import RecycleView
在下面的示例中,我们将创建一个垂直的按钮列表。
第一步是定义我们的recycleview的布局和视图类:
Builder.load_string(''' <ExampleRV>: viewclass: 'Button' RecycleBoxLayout: size_hint_y: None height: self.minimum_height orientation: 'vertical' ''')
现在我们必须定义我们的 recycleview 类:
class ExampleRV(RecycleView): def __init__(self, **kwargs): super(ExampleRV, self).__init__(**kwargs) self.data = [{'text': str(x)} for x in range(20)]
其中,
__init__
带有 kwargs的类的构造函数意味着可以接受任意数量的参数或者关键字参数。
现在调用上面的类:
class RecycleApp(App): def build(self): return ExampleRV() RecycleApp().run()
所以完整的代码会是这样的:
from kivy.app import App from kivy.uix.recycleview import RecycleView from kivy.lang import Builder Builder.load_string(''' <ExampleRV>: viewclass: 'Button' RecycleBoxLayout: size_hint_y: None height: self.minimum_height orientation: 'vertical' ''') class ExampleRV(RecycleView): def __init__(self, **kwargs): super(ExampleRV, self).__init__(**kwargs) self.data = [{'text': str(x)} for x in range(20)] class RecycleApp(App): def build(self): return ExampleRV() RecycleApp().run()