python - 无法在 Kivy 中删除小部件
问题描述
我无法使用带有 kivy python 的屏幕删除小部件,我不知道为什么它只是不做任何代码假设在第一个屏幕上删除带有 id:name 的 textinput 但它只是不做任何事情并且没有错误消息。这是在 python 3.7.4、kivy 1.11.1 上测试的所有代码。
module_media_player.py
import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.lang import Builder
from kivy.core.audio import SoundLoader
from kivy.uix.videoplayer import VideoPlayer
from kivy.uix.screenmanager import ScreenManager,Screen
class Player(Screen):
def press(self):
self.ids.name.text = 'nice'
def remove(self):
self.remove_widget(self.ids.name)
class MediaPlayer(Screen):
pass
class WindowManager(ScreenManager):
pass
kv = Builder.load_file('my.kv')
class GoodApp(App):
def build(self):
return kv
if __name__ == '__main__':
GoodApp().run()
我的.kv
WindowManager:
Player:
MediaPlayer:
<Player>:
name:"player"
BoxLayout:
orientation:"vertical"
size:root.width,root.height
cols:2
TextInput:
id:name
multiline:False
text:"first"
font_size:12
size_hint_y:0.3
Button:
text:"click me"
on_press:root.remove()
Button:
text:"next window"
font_size:14
size_hint_y:0.7
on_release:
app.root.current = "mediaplayer"
root.manager.transition.direction = "left"
<MediaPlayer>:
name:"mediaplayer"
BoxLayout:
orientation:"vertical"
size:root.width,root.height
Label:
text:"second"
font_size:12
Button:
text:"previous window"
font_size:14
on_release:
app.root.current = "player"
root.manager.transition.direction = "right"
解决方案
你的代码:
def remove(self):
self.remove_widget(self.ids.name)
正在尝试TextInput
从中删除Player
Screen
,但那Textinput
不是Player
. 它实际上是一个孩子BoxLayout
。您可以通过修改remove()
方法来解决此问题:
def remove(self):
textinput = self.ids.name
textinput.parent.remove_widget(textinput) # remove widget from its parent
推荐阅读
- android - ui 自动化查看器 -adb -错误获取设备截图 -adb 未检测到安卓设备
- php - Laravel:如何在运行时注册路由?
- javascript - 将信息传递给 php 表单而不提交的按钮
- python - 如何在python中使用networkx在无向图中获取三合会人口普查
- html - 使用html中的样式将div类左对齐
- npm - NPM 无法安装 webpack
- android - 如何在我的 xml 文件中实现这种设计?
- ios - 按钮单击表格视图以更改表格视图单元格中的图像
- angular - WebStorm 在快捷方式上执行 TSLint
- reactjs - 使用 TypeScript 扩展 React 组件类