Итак, я создаю приложение, в котором указан входной веб-сайт, и который позволяет пользователю выбирать тег (например, div, body, article), атрибут (например, class, style, id) и значение. атрибута и вывести соответствующий HTML-код соответствующего веб-сайта. Теперь на одном из моих экранов в приложении kivy мне нужно, чтобы у моего счетчика (id: tag
в коде) был список всех возможных тегов на веб-сайте. Этот список всех возможных тегов является результатом метода с именем updateTagSpinner
Код иллюстрирует то, что я пытался сделать, и он возвращает AssertionError
. Я понятия не имею, что делать или как это решить. Любая помощь будет оценена :) 1006 *
Приветствие.
код
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()
my.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"
AssertionError
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)