gpt4 book ai didi

python - 我如何将小部件添加到 FloatLayout 内的 ScrollView 内的 StackLayout?

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:44 24 4
gpt4 key购买 nike

对 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’”

最佳答案

您的代码存在一些问题。

首先,您的 kvFloatLayout ,当您似乎真的想引用您的 Page 时类(class)。 (您引用了 root.add_button() ,但该方法在 Page 类中)。

其次,你的testbuttonTestButton 的单个实例, 所以你第二次点击 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为你的StackLayoutkv :

#: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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com