gpt4 book ai didi

python - 如何将微调器值设置为等于 kivy 中 python 方法的输出列表

转载 作者:行者123 更新时间:2023-11-28 17:58:59 24 4
gpt4 key购买 nike

所以我正在构建一个应用程序,它给定一个输入网站,能够允许用户选择一个标签(例如 div、body、article)、一个属性(例如 class、style、id)和一个值属性并输出相关网站的相关HTML代码。现在,在我的 kivy 应用程序的一个屏幕中,我需要让我的微调器(代码中的 id: tag)有一个网站中所有可能标签的列表。所有可能标签的列表是名为 updateTagSpinner

的方法的输出

该代码说明了我尝试执行的操作,它返回了一个 AssertionError。我不知道该怎么做,或者如何解决这个问题。任何帮助将不胜感激:)

干杯。

代码

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

class MainWindow(Screen):
pass # assume everything works fine here

# SecondWindow is the screen where I am having a problem
# tags_list is the list of tags (updateTagSpinner works fine)
# storeUrl.txt just has the URL in question

class SecondWindow(Screen):
tag = ObjectProperty(None)
def urlaccess(self):
with open("storeUrl.txt", "r") as f:
url = f.read()
return url
def populateTags(self,url):
tags_list = HTMLReturner.tagRetriever(url)
return tags_list
def updateTagSpinner(self):
self.tag.text = 'Tag Type'
sw = SecondWindow()
url2scrape = sw.urlaccess()
tags_list = sw.populateTags(url2scrape)
return tags_list

class WindowManager(ScreenManager):
pass


class MyApp(App):
def build(self):
return Builder.load_file('my.kv')


if __name__ == "__main__":
MyApp().run()

我的.kv

WindowManager:
MainWindow:
SecondWindow:

<MainWindow>
name: "first"

GridLayout:
cols: 1

choice: choice
url: url
Label:
text: "Scraper for Developers (EY)"
font_size: 40
pos_hint: {"center": (0.5, 0.95)}
GridLayout:
cols: 2
Label:
text: "URL"
font_size: 24
TextInput:
id: url
font_size: 14
multiline: True
Spinner:
id: choice
values: ['Headings', 'URLs', 'Images', 'Custom']
text: 'Scraping Type'
Button:
id: btn
size: 100, 44
pos_hint: {"x": 0.87, "top": 0.08}
text: 'Continue'
on_release:
root.actionURL(url.text) if choice.text == "URLs" else None
root.actionHEADING(url.text) if choice.text == "Headings" else None
root.actionIMG(url.text) if choice.text == "Images" else None
app.root.current = "second" if choice.text == "Custom" else "first"
root.filewriter(url.text) if choice.text == "Custom" else None
root.manager.transition.direction = "left"


<SecondWindow>
name: "second"
tag: tag
GridLayout:
cols:1
Label:
text: "CUSTOM SETTINGS"
font_size: 25
GridLayout:
cols:2
Label:
text: "TAG TYPE"
font_size: 14
Spinner:
id: tag
text: 'Tag Type'
values: root.updateTagSpinner()
Label:
text: "ATTRIBUTE TYPE"
font_size: 14
Spinner:
id: attribute
values: ['a','b','c','d']
text: 'Att. Type'
Label:
text: "Value of Attribute"
font_size: 14
TextInput:
id: value_bute
font_size: 14
multiline: False
Button:
text: "Go Back"
on_release:
app.root.current = "first"
root.manager.transition.direction = "left"
Button:
text: "Show Me The Code"
on_release:
app.root.current = "first"
root.manager.transition.direction = "left"

断言错误

 Traceback (most recent call last):
File "C:\Users\saxon\Anaconda3\lib\site-packages\kivy\lang\builder.py", line 692, in _apply_rule
rctx['ids'])
File "C:\Users\saxon\Anaconda3\lib\site-packages\kivy\lang\builder.py", line 254, in create_handler
cause=tb)
kivy.lang.builder.BuilderException: Parser: File "C:\Users\saxon\PycharmProjects\PythonMobileApplication\my.kv", line 60:
...
58: id: tag
59: text: 'Tag Type'
>> 60: values: root.updateTagSpinner()
61: Label:
62: text: "ATTRIBUTE TYPE"
...
AssertionError:
File "C:\Users\saxon\Anaconda3\lib\site-packages\kivy\lang\builder.py", line 249, in create_handler
return eval(value, idmap), bound_list
File "C:\Users\saxon\PycharmProjects\PythonMobileApplication\my.kv", line 60, in <module>
values: root.updateTagSpinner()
File "C:/Users/saxon/PycharmProjects/PythonMobileApplication/flayoutapp.py", line 75, in updateTagSpinner
sw = SecondWindow()
File "C:\Users\saxon\Anaconda3\lib\site-packages\kivy\uix\relativelayout.py", line 265, in __init__
super(RelativeLayout, self).__init__(**kw)
File "C:\Users\saxon\Anaconda3\lib\site-packages\kivy\uix\floatlayout.py", line 65, in __init__
super(FloatLayout, self).__init__(**kwargs)
File "C:\Users\saxon\Anaconda3\lib\site-packages\kivy\uix\layout.py", line 76, in __init__
super(Layout, self).__init__(**kwargs)
File "C:\Users\saxon\Anaconda3\lib\site-packages\kivy\uix\widget.py", line 361, in __init__
rule_children=rule_children)
File "C:\Users\saxon\Anaconda3\lib\site-packages\kivy\uix\widget.py", line 469, in apply_class_lang_rules
rule_children=rule_children)
File "C:\Users\saxon\Anaconda3\lib\site-packages\kivy\lang\builder.py", line 538, in apply
rule_children=rule_children)
File "C:\Users\saxon\Anaconda3\lib\site-packages\kivy\lang\builder.py", line 554, in _apply_rule
assert(rule not in self.rulectx)

最佳答案

在您的 updateTagSpinner 方法中,您在 sw = SecondWindow() 行上创建一个新的 SecondScreen,然后调用该新的方法第二个屏幕。问题是您在 Screen 上调用的方法不是您的 App 显示的一部分。我怀疑您应该在 SecondScreen 上调用那些方法,它是您的 App 显示的一部分。

尝试将您的 updateTagSpinner 方法更改为:

def updateTagSpinner(self):
self.tag.text = 'Tag Type'
url2scrape = self.urlaccess()
tags_list = self.populateTags(url2scrape)
if tags_list is None:
tags_list = []
return tags_list

不能 100% 确定这会解决您的问题,因为我无法对其进行测试(我没有 storeUrl.txt 文件)。

关于python - 如何将微调器值设置为等于 kivy 中 python 方法的输出列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56690500/

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