- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
对 kivy 还很陌生,只接受过 python 的高中教育,现在已经坚持了一个星期。我想要一个可以在 StackLayout 中添加和删除按钮的系统,我该怎么做?
我可以添加和删除按钮,我现在只需要弄清楚如何将它们放置在正确的区域。
我知道这个问题有点乱,我已经深入了解了这个问题,但我认为最好的学习方法是直接投入其中。
python代码:
# import kivy & functions/widgets.
import kivy
from kivy.app import App
from kivy.uix.button import Button
# import kivy layouts.
from kivy.uix.floatlayout import FloatLayout
# Specify version of kivy needed.
kivy.require("1.10.1")
# define buttons and widgets
testButton = Button(width=177, height=254, size_hint=(None, None), background_normal="pics/32864.jpg")
class Page(FloatLayout):
def __init__(self):
super().__init__()
def add_button(self):
Page.add_widget(self, widget=testButton)
class YuGiOhApp(App):
pass
YuGiOhApp().run()
我的 .kv 代码:
#:kivy 1.10.1
<TestButton@Button>:
width: 177
height: 254
size_hint: None, None
background_normal: "pics/32864.jpg"
FloatLayout:
Button:
size_hint: 0.20, 0.10
pos_hint: {"x": 0.60, "top": 1}
text: "Search"
on_press: root.add_button()
Button:
size_hint: 0.20, 0.10
pos_hint: {"x": 0.80, "top": 1}
text: "collection"
TextInput:
multiline: False
font_size: 48
size_hint: 0.60, 0.10
pos_hint: {"x": 0, "top": 1}
ScrollView:
size_hint: 0.60, 0.90
StackLayout:
orientation: "lr-tb"
pos_hint: {"x": 0, "top": 0.88}
size_hint: 1, None
height: self.minimum_height
padding: 5
spacing: 5
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
编辑 4:在按下标有“搜索”的按钮时尝试运行 add_button() 函数时出现错误“AttributeError:‘FloatLayout’对象没有属性‘add_button’”
最佳答案
您的代码存在一些问题。
首先,您的 kv
指FloatLayout
,当您似乎真的想引用您的 Page
时类(class)。 (您引用了 root.add_button()
,但该方法在 Page
类中)。
其次,你的testbutton
是 TestButton
的单个实例, 所以你第二次点击 Search
按钮,您会收到有关该按钮已经有父项的错误。所以我创建了一个 TestButton
python 代码中的类并删除了 <TestButton@Button>
来自 kv
的规则.
这是我认为您想要的代码:
# import kivy & functions/widgets.
import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
# import kivy layouts.
from kivy.uix.floatlayout import FloatLayout
# Specify version of kivy needed.
kivy.require("1.10.1")
# define buttons and widgets
class TestButton(Button):
def __init__(self, **kwargs):
super(TestButton, self).__init__(**kwargs)
self.width = 177
self.height = 254
self.size_hint = (None, None)
self.background_normal = "pics/32864.jpg"
class Page(FloatLayout):
def __init__(self):
super().__init__()
def add_button(self):
self.ids.stack.add_widget(TestButton())
class YuGiOhApp(App):
def build(self):
return Page()
YuGiOhApp().run()
并添加 id
为你的StackLayout
在kv
:
#:kivy 1.10.1
<Page>:
Button:
size_hint: 0.20, 0.10
pos_hint: {"x": 0.60, "top": 1}
text: "Search"
on_press: root.add_button()
Button:
size_hint: 0.20, 0.10
pos_hint: {"x": 0.80, "top": 1}
text: "collection"
TextInput:
multiline: False
font_size: 48
size_hint: 0.60, 0.10
pos_hint: {"x": 0, "top": 1}
ScrollView:
size_hint: 0.60, 0.90
StackLayout:
id: stack
orientation: "lr-tb"
pos_hint: {"x": 0, "top": 0.88}
size_hint: 1, None
height: self.minimum_height
padding: 5
spacing: 5
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
TestButton:
新add_button()
方法指的是新的stack
访问 StackLayout
的 ID并创建一个新的 TestButton
每次调用它。
关于python - 我如何将小部件添加到 FloatLayout 内的 ScrollView 内的 StackLayout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54546626/
使用这段代码: from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.uix.textinpu
对 kivy 还很陌生,只接受过 python 的高中教育,现在已经坚持了一个星期。我想要一个可以在 StackLayout 中添加和删除按钮的系统,我该怎么做? 我可以添加和删除按钮,我现在只需要弄
我正在尝试在我的测试 UI 中对齐标签和按钮这是我的 kv 文件 : Label: text: "foo" color: 0,1,0,1
我是一名优秀的程序员,十分优秀!