gpt4 book ai didi

python - 我使用的 Accordion 表现得很奇怪,屏幕上的文本输入也不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 14:03:50 26 4
gpt4 key购买 nike

在我的代码的显示屏幕上,我使用了 Accordion ,我已按照指示完成了所有操作,并且该页面中的 TextInput 代码是正确的,但 Accordion 未按预期工作,并且 textInput 未按预期工作接受任何输入。我是 kivy 的新手,据我所知,一切对我来说都是正确的。

这是我的代码:

    import kivy
kivy.require('1.10.0')

from kivy.uix.stacklayout import StackLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.app import App
from kivy.uix.popup import Popup
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.properties import ObjectProperty
from kivy.uix.textinput import TextInput
from kivy.properties import StringProperty


import json

Builder.load_file('VocabularyJournal.kv')

class MenuPage(Screen):
pass

class DisplayPage(Screen): # here is the display page[![enter image description here][1]][1]
search_box= ObjectProperty()
label_maening=StringProperty()
label_synonym=StringProperty()
label_ant=StringProperty()
label_sentence=StringProperty()


def search_function(self):
with open('vocab_words.json') as rfile:
data=json.load(rfile)

word=self.search_box.text

for value in data:
if value['word']==word:
self.label_maening=value['meaning']
self.label_synonym=value['synonym']
self.label_ant=value['antonyms']
self.label_sentence=value['sentence']


class WordInsertPage(Screen):
pass


class NewWordPage(Screen):
word_box = ObjectProperty()
meaning_box = ObjectProperty()
synonym_box = ObjectProperty()
ant_box = ObjectProperty()
sentence_box = ObjectProperty()


def saving_data(self):

with open('vocab_words.json') as rfile:
data=json.load(rfile)


entry={'word': self.word_box.text, 'meaning': self.meaning_box.text, 'synonym': self.synonym_box.text, 'antonyms': self.ant_box.text, 'sentence': self.sentence_box.text}
data.append(entry)


with open('vocab_words.json','w') as wfile:
json.dump(data,wfile,indent=4)


class FlashCard(Screen):
pass

class WordGroups(Screen):
pass

class Manager(ScreenManager):
pass

class VocabularyJournalApp(App):
def build(self):
return Manager()

object = VocabularyJournalApp()
object.run()

这是 kivy 代码-

    <Manager>:
MenuPage:
name: 'menu'
WordInsertPage:
name: 'insertword'
NewWordPage:
name: 'newword'
FlashCard:
name: 'flashcard'
WordGroups:
name: 'wordgroup'
DisplayPage:
name: 'display'

<MenuPage>:
Label:
text: "Vocabulary Journal"
size_hint: .90,.10

StackLayout:
orientation: 'tb-rl'
spacing: 10
padding: 10

Button:
text: 'Search'
size_hint: None,.20
width: 130
background_down:'darkgrey.png'
on_press: root.manager.current='insertword'
Button:
text: 'New Word'
size_hint: None,.20
width: 130
background_down:'darkgrey.png'
on_press: root.manager.current='insertword'
Button:
text: 'Flash Cards'
size_hint: None,.20
width: 130
background_down:'darkgrey.png'
on_press: root.manager.current='flashcard'

Button:
text: 'Word Groups'
size_hint: None,.20
width: 130
background_down:'darkgrey.png'
on_press: root.manager.current='wordgroup'

<WordInsertPage>:

FloatLayout:

Button:
text: "New Word"
on_press: root.manager.current='newword'
font_size: 30
color: 0,0,0,1
size_hint: .2, .1
pos_hint: {"center_x": .5, "center_y": 0.3}
background_down: 'darkgrey.png'
Button:
text: "search word"
on_press: root.manager.current='display'
font_size: 30
color: 0,0,0,1
size_hint: .2, .1
pos_hint: {"center_x": .5, "center_y": 0.5}
background_down: 'darkgrey.png'
Button:
text: 'Flash Cards'
on_press: root.manager.current="flashcard"
font_size: 30
color: 0,0,0,1
size_hint: .2, .1
pos_hint: {"center_x": .5, "center_y": 0.7}
background_down: 'darkgrey.png'



<NewWordPage>:
id: refer_to_it
word_box: word_input
meaning_box: meaning_input
synonym_box: Synonym_input
ant_box: ant_input
sentence_box: sentence_input
StackLayout:
orientation: 'tb-rl'
spacing: 10
padding: 90
TextInput:
text: "write your word here"
color: 1,1,1,1
id: word_input
width: 300
size_hint: None, .10

TextInput:
text: "write meaning of your word here"
color: 1,1,1,1
id: meaning_input
width: 600
size_hint: None, .20

TextInput:
text: "write Synonyms of your word here"
color: 1,1,1,1
id: Synonym_input
width: 600
size_hint: None, .20

TextInput:
text: "write antonyms of your text here"
color: 1,1,1,1
id: ant_input
width: 600
size_hint: None, .20

TextInput:
text: "write a sentence based on your word here"
color: 1,1,1,1
id: sentence_input
width: 600
size_hint: None, .20

Button:
text: 'Save'
size_hint: None,.10
width: 130
background_down:'darkgrey.png'
on_press: refer_to_it.saving_data()

<DisplayPage>: # here is the display page
search_box: search_text
BoxLayout:
size_hint_y: None
height: '48dp'

TextInput:
text:'enter the word you wanna search here'
id: search_text
on_text_validate: root.search_function()

Accordion:
orientation: 'vertical'

AccordionItem:
title:'meaning'

Label:
text: root.label_maening
text_size: self.width, None

AccordionItem:
title:'Synonym'

Label:
text: root.label_synonym
text_size: self.width, None

AccordionItem:
title:'Antonym'

Label:
text: root.label_ant
text_size: self.width, None

AccordionItem:
title:'Sentence'

Label:
text: root.label_sentence
text_size: self.width, None

enter image description here

最佳答案

原则上我看到三个问题:

  • on_text_validate 不会在多行输入中触发。您应该将 multiline 属性设置为 False

  • 使用hint_text属性来设置建议文本。

  • 您的 Accordion 的奇怪行为可能是由于您加载 kv 文件两次而引起的(您的 “多个屏幕名为 ...” 警告表明了这一点。)。我建议将您的 kv 重命名为 vocabularyjournal.kv,而不是使用 Builder.load_file ()。您可以查看this related answer .

ma​​in.py:

import kivy
kivy.require('1.10.0')

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
from kivy.properties import StringProperty


import json


class MenuPage(Screen):
pass

class DisplayPage(Screen):
search_box= ObjectProperty()
label_maening=StringProperty()
label_synonym=StringProperty()
label_ant=StringProperty()
label_sentence=StringProperty()


def search_function(self):
with open('vocab_words.json') as rfile:
data=json.load(rfile)

word=self.search_box.text

for value in data:
if value['word']==word:
self.label_maening=value['meaning']
self.label_synonym=value['synonym']
self.label_ant=value['antonyms']
self.label_sentence=value['sentence']


class WordInsertPage(Screen):
pass


class NewWordPage(Screen):
word_box = ObjectProperty()
meaning_box = ObjectProperty()
synonym_box = ObjectProperty()
ant_box = ObjectProperty()
sentence_box = ObjectProperty()


def saving_data(self):

with open('vocab_words.json') as rfile:
data=json.load(rfile)


entry={'word': self.word_box.text, 'meaning': self.meaning_box.text, 'synonym': self.synonym_box.text, 'antonyms': self.ant_box.text, 'sentence': self.sentence_box.text}
data.append(entry)


with open('vocab_words.json','w') as wfile:
json.dump(data,wfile,indent=4)


class FlashCard(Screen):
pass

class WordGroups(Screen):
pass

class Manager(ScreenManager):
pass

class VocabularyJournalApp(App):
def build(self):
return Manager()

obj = VocabularyJournalApp()
obj.run()

vocabularyjournal.kv:

<Manager>:
MenuPage:
name: 'menu'
WordInsertPage:
name: 'insertword'
NewWordPage:
name: 'newword'
FlashCard:
name: 'flashcard'
WordGroups:
name: 'wordgroup'
DisplayPage:
name: 'display'

<MenuPage>:
Label:
text: "Vocabulary Journal"
size_hint: .90,.10

StackLayout:
orientation: 'tb-rl'
spacing: 10
padding: 10

Button:
text: 'Search'
size_hint: None,.20
width: 130
background_down:'darkgrey.png'
on_press: root.manager.current='insertword'
Button:
text: 'New Word'
size_hint: None,.20
width: 130
background_down:'darkgrey.png'
on_press: root.manager.current='insertword'
Button:
text: 'Flash Cards'
size_hint: None,.20
width: 130
background_down:'darkgrey.png'
on_press: root.manager.current='flashcard'

Button:
text: 'Word Groups'
size_hint: None,.20
width: 130
background_down:'darkgrey.png'
on_press: root.manager.current='wordgroup'

<WordInsertPage>:

FloatLayout:

Button:
text: "New Word"
on_press: root.manager.current='newword'
font_size: 30
color: 0,0,0,1
size_hint: .2, .1
pos_hint: {"center_x": .5, "center_y": 0.3}
background_down: 'darkgrey.png'
Button:
text: "search word"
on_press: root.manager.current='display'
font_size: 30
color: 0,0,0,1
size_hint: .2, .1
pos_hint: {"center_x": .5, "center_y": 0.5}
background_down: 'darkgrey.png'
Button:
text: 'Flash Cards'
on_press: root.manager.current="flashcard"
font_size: 30
color: 0,0,0,1
size_hint: .2, .1
pos_hint: {"center_x": .5, "center_y": 0.7}
background_down: 'darkgrey.png'



<NewWordPage>:
id: refer_to_it
word_box: word_input
meaning_box: meaning_input
synonym_box: Synonym_input
ant_box: ant_input
sentence_box: sentence_input
StackLayout:
orientation: 'tb-rl'
spacing: 10
padding: 90
TextInput:
hint_text: "write your word here"
color: 1,1,1,1
id: word_input
width: 300
size_hint: None, .10

TextInput:
hint_text: "write meaning of your word here"
color: 1,1,1,1
id: meaning_input
width: 600
size_hint: None, .20

TextInput:
hint_text: "write Synonyms of your word here"
color: 1,1,1,1
id: Synonym_input
width: 600
size_hint: None, .20

TextInput:
hint_text: "write antonyms of your text here"
color: 1,1,1,1
id: ant_input
width: 600
size_hint: None, .20

TextInput:
hint_text: "write a sentence based on your word here"
color: 1,1,1,1
id: sentence_input
width: 600
size_hint: None, .20

Button:
hint_text: 'Save'
size_hint: None,.10
width: 130
background_down:'darkgrey.png'
on_press: refer_to_it.saving_data()

<DisplayPage>: # here is the display page
search_box: search_text
BoxLayout:
size_hint_y: None
height: '48dp'

TextInput:
hint_text:'enter the word you wanna search here'
id: search_text
multiline: False
on_text_validate: root.search_function()

Accordion:
orientation: 'vertical'

AccordionItem:
title:'meaning'

Label:
text: root.label_maening
text_size: self.width, None

AccordionItem:
title:'Synonym'

Label:
text: root.label_synonym
text_size: self.width, None

AccordionItem:
title:'Antonym'

Label:
text: root.label_ant
text_size: self.width, None

AccordionItem:
title:'Sentence'

Label:
text: root.label_sentence
text_size: self.width, None

Note: You shouldn't use object as variable name. It is a built-in function.

关于python - 我使用的 Accordion 表现得很奇怪,屏幕上的文本输入也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49058162/

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