gpt4 book ai didi

python - 如何使用python类在kivy中使用下拉小部件

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:41 25 4
gpt4 key购买 nike

所以,我认为至少应该有两种方法可以让我在这个页面上有一个下拉菜单,但我都无法使用。我是 kivy 和一般编程的新手,但我已经阅读了文档,但似乎我根本不明白。

我创建了以下示例:

import kivy
kivy.require('1.7.2') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown

class CustomDropDown(DropDown):
pass

class HomeScreen(Screen):
translateInput = ObjectProperty(None)
translateButton = ObjectProperty(None)
translateLabel = ObjectProperty(None)
top_layout = ObjectProperty(None)
dd_btn = ObjectProperty(None)
drop_down = CustomDropDown()
#notes_dropdown = ObjectProperty(None)


dropdown = DropDown()
notes = ['Features', 'Suggestions', 'Abreviations', 'Miscellaneous']
for note in notes:
# when adding widgets, we need to specify the height manually (disabling
# the size_hint_y) so the dropdown can calculate the area it needs.
btn = Button(text='%r' % note, size_hint_y=None, height=30)

# for each button, attach a callback that will call the select() method
# on the dropdown. We'll pass the text of the button as the data of the
# selection.
btn.bind(on_release=lambda btn: dropdown.select(btn.text))

# then add the button inside the dropdown
dropdown.add_widget(btn)

# create a big main button
mainbutton = Button(text='Usage Notes 2', size_hint=(1, 1))

# show the dropdown menu when the main button is released
# note: all the bind() calls pass the instance of the caller (here, the
# mainbutton instance) as the first argument of the callback (here,
# dropdown.open.).
mainbutton.bind(on_release=dropdown.open)
#dd_btn.bind(on_release=dropdown.open)

# one last thing, listen for the selection in the dropdown list and
# assign the data to the button text.
dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', x))
#dropdown.bind(on_select=lambda instance, x: setattr(dd_btn, 'text', x))

#top_layout.add_widget(mainbutton)


class dropdApp(App):

def build(self):

return HomeScreen()



if __name__ == '__main__':
dropdApp().run()

这是对应的 .kv 文件:

#:kivy 1.7.2

<CustomDropDown>:
Button:
text: 'My first Item'
size_hint_y: None
height: 44
on_release: root.select('item1')
Label:
text: 'Unselectable item'
size_hint_y: None
height: 44
Button:
text: 'My second Item'
size_hint_y: None
height: 44
on_release: root.select('item2')

<HomeScreen>:
id: home_screen
translateInput: translateInputID
translateButton: translateButtonID
translateLabel: labelID
top_layout: topLayoutID
#notes_dropdown: notesDropDownID
dd_btn: btn_ddID

orientation: 'vertical'
FloatLayout:
size_hint: 1, .95
TextInput:
id: translateInputID
text: 'cove'
#text: 'ﻰﺸَﻣ'
font_name: "data/fonts/DejaVuSans.ttf"
background_color: 1, 1, 1, 1
size_hint: .75, .1
multiline: False
pos_hint: {'x': .125, 'y': .45}
text_size: self.size
valign: 'middle'
halign: 'center'
padding: 5

Button:
id: translateButtonID
text: 'Translate'
pos_hint: {'x': .35, 'y': .35}
size_hint: .3, .08
valign: 'middle'
halign: 'center'
text_size: self.size
on_release: root.translateButtonPressed()
#on_press: root.manager.current = 'resultsscreen'

Label:
id: labelID
text: 'Translator'
text_size: self.size
valign: 'middle'
halign: 'center'
pos_hint: {'x': .3, 'y': .75}
size_hint: .4, .2
#font_name: "simpo.ttf"
#font_name: "5thgradecursive.ttf"
#font_name: "AGA-Rasheeq-Regular.ttf"
font_name: "data/fonts/DejaVuSans.ttf"
font_size: 50

BoxLayout:
id: topLayoutID
#cols: 2
size_hint: 1, .05
pos_hint: {'x': 0, 'y': .95}
Button:
#id: notesDropDownID
id: btn_ddID
text: 'Usage Notes'
on_release: root.drop_down.open
Button:
text: 'About'
  1. 第一个下拉菜单应附加到 kv 文件底部已创建的按钮“使用说明”。它附加到 python 中的类“CustomDropDown”,以及 kv 文件中的相应类。你可能会注意到这个例子直接来自 kivy 文档。我想通过创建这条线:

    drop_down = CustomDropDown()

    它为我提供了 python 和 kivy 方面的句柄来操作它,但正如您可能注意到的那样,当您运行它并单击“使用说明”时,没有任何反应。

  2. 第二个下拉菜单也是按照 kivy 文档用 python 创建的。我认为它会在应用程序顶部创建第三个按钮,标题为“使用说明 2”。我只是在尝试添加它时遇到错误。现在该行(在我的文件中为 53):

    top_layout.add_widget(mainbutton)

    被注释掉或应用程序甚至无法运行,引发错误:

    AttributeError: 'kivy.properties.ObjectProperty' object has no attribute 'add_widget'

    我意识到我确实设置了

    top_layout = ObjectProperty(None)

    但这就是 kivy 建议对许多小部件执行的操作,我已经对许多其他小部件执行了操作而没有出现此错误。

我确信其中一个或两个问题对外面的人来说很简单。我错过了什么?

最佳答案

我在这里发布这个,希望它能帮助其他只想要一个可以放在 .kv 文件中的下拉按钮的 kivy 初学者。

class DropBut(Button):
def __init__(self, **kwargs):
super(DropBut, self).__init__(**kwargs)
self.drop_list = None
self.drop_list = DropDown()

types = ['Item1', 'Item2', 'Item3', 'Item4', 'Item5', 'Item6']

for i in types:
btn = Button(text=i, size_hint_y=None, height=50)
btn.bind(on_release=lambda btn: self.drop_list.select(btn.text))

self.drop_list.add_widget(btn)

self.bind(on_release=self.drop_list.open)
self.drop_list.bind(on_select=lambda instance, x: setattr(self, 'text', x))

关于python - 如何使用python类在kivy中使用下拉小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21294152/

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