每次我尝试初始化一个kivy屏幕时,我总是会收到一个错误,即使我已经研究过了,这表明我是用正确的方法来做的。我想从我的ProjectListScreen class
访问实例,我将实例初始化为“无”,但将屏幕初始化到ApplyPage不起作用,我尝试使用Factory将类实例化到我的ApplyPage class
中,但它仍然没有返回实例的值。下面是我的代码,之后是我尝试初始化screen类时的回溯。我将感谢任何帮助。拜托,我一整天都在为这件事挣扎
class ProjectListScreen(Screen):
project_list = ObjectProperty(None)
def __init__(self, **kwargs):
super(ProjectListScreen, self).__init__(**kwargs)
self.thelocalId = None
self.placementtext = None
def on_pre_enter(self, *args):
placements = database.child("placements").get()
placementslist = placements.val()
placementslist.items()
for key, value in placementslist.items():
self.key = key
key_list = []
key_list.append(key)
for key in key_list:
name = database.child("placements").child(str(key)).child("placement name").get()
description = database.child("placements").child(str(key)).child("placement description").get()
location = database.child("placements").child(str(key)).child("placement location").get()
date = database.child("placements").child(str(key)).child("placement date").get()
price = database.child("placements").child(str(key)).child("placement price").get()
thelocalId = database.child("placements").child(str(key)).child("localId").get()
self.thelocalId = thelocalId.val()
self.project_list.adapter.data.extend([ "\n" + "\n" + str(name.val()) + '\n' + str(description.val()) + "\n" + str(location.val()) + '\n' + str(date.val()) + '\n' + '\n' + str(price.val())])
def gettext(self):
self.placementtext = self.project_list.adapter.selection[0].text
class ApplyPage(Screen):
projectlistscreen = ObjectProperty(None)
def __init__(self, projectlistscreen, **kwargs):
super(ApplyPage, self).__init__(**kwargs)
self.projectlistscreen = projectlistscreen
self.yes = Button(text="Yes", font_size = 20, font_name= "fonts/Qanelas-Heavy.otf", background_color = (0.082, 0.549, 0.984, 1.0), background_normal= '', pos_hint = {"x":0.1,"y":0.05}, size_hint= [0.2, 0.1])
self.add_widget(self.yes)
self.no = Button(text="No", font_size= 20, font_name= "fonts/Qanelas-Heavy.otf", background_color = (0.082, 0.549, 0.984, 1.0), background_normal= '', pos_hint = {"x":0.7, "y":0.05}, size_hint= [0.2, 0.1])
self.no.bind(on_pressed=self.nopressed)
self.add_widget(self.no)
def nopressed(self, instance):
sm.current = "placements"
class MyApp(App):
refresh_token_file = "refresh_token.txt"
members_list = "members_list.txt"
def build(self):
self.refresh_token_file = self.user_data_dir + self.refresh_token_file
self.thefirebase = MyFireBase()
return sm
projectlistscreen = ProjectListScreen()
wm = WindowManager()
wm.add_widget(ApplyPage(projectlistscreen=projectlistscreen))
sm = Builder.load_file("kivy.kv")
奇维锉刀
#:import Factory kivy.factory.Factory
#: import mainfile mainfile
#: import ListAdapter kivy.adapters.listadapter.ListAdapter
#: import ListItemButton kivy.uix.listview.ListItemButton
#: import FileChooserIconView kivy.uix.filechooser.FileChooserIconView
WindowManager:
id: window manager
ApplyPage:
id: applyingpage
name: "applyingpage"
ProjectListScreen:
id: project_list_screen
name: "project_list_screen"
<ApplyPage>:
name: "applyingpage"
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
<ProjectListScreen>:
project_list: project_list_view
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
Image:
source: "icons/m.png"
pos_hint: {"center_x": 0.5, "center_y": 0.95}
BoxLayout:
orientation: 'vertical'
pos_hint: {"center_x": 0.3, "center_y": 0.3}
ListView:
id: project_list_view
adapter:
ListAdapter(data=[], cls = mainfile.ProjectListButton)
下面是我的回溯
Traceback (most recent call last):
File "/Users/temitayoadefemi/PycharmProjects/test5/mainfile.py", line 836, in <module>
sm = Builder.load_file("kivy.kv")
File "/Users/temitayoadefemi/PycharmProjects/test5/venv/lib/python3.7/site-packages/kivy/lang/builder.py", line 301, in load_file
return self.load_string(data, **kwargs)
File "/Users/temitayoadefemi/PycharmProjects/test5/venv/lib/python3.7/site-packages/kivy/lang/builder.py", line 368, in load_string
parser = Parser(content=string, filename=fn)
File "/Users/temitayoadefemi/PycharmProjects/test5/venv/lib/python3.7/site-packages/kivy/lang/parser.py", line 392, in __init__
self.parse(content)
File "/Users/temitayoadefemi/PycharmProjects/test5/venv/lib/python3.7/site-packages/kivy/lang/parser.py", line 498, in parse
self.execute_directives()
File "/Users/temitayoadefemi/PycharmProjects/test5/venv/lib/python3.7/site-packages/kivy/lang/parser.py", line 462, in execute_directives
mod = __import__(package)
File "/Users/temitayoadefemi/PycharmProjects/test5/mainfile.py", line 836, in <module>
sm = Builder.load_file("kivy.kv")
File "/Users/temitayoadefemi/PycharmProjects/test5/venv/lib/python3.7/site-packages/kivy/lang/builder.py", line 301, in load_file
return self.load_string(data, **kwargs)
File "/Users/temitayoadefemi/PycharmProjects/test5/venv/lib/python3.7/site-packages/kivy/lang/builder.py", line 400, in load_string
self._apply_rule(widget, parser.root, parser.root)
File "/Users/temitayoadefemi/PycharmProjects/test5/venv/lib/python3.7/site-packages/kivy/lang/builder.py", line 582, in _apply_rule
child = cls(__no_builder=True)
TypeError: __init__() missing 1 required positional argument: 'projectlistscreen'
新错误代码
File "/Users/temitayoadefemi/PycharmProjects/test5/mainfile.py", line 834, in <module>
wm.add_widget(ApplyPage(projectlistscreen))
TypeError: __init__() takes 1 positional argument but 2 were given
如果有人能找出我的错误,为什么屏幕没有初始化。多谢各位
ApplyPage
类的__init__()
方法需要位置参数projectlistscreen
。当加载kv
文件并遇到ApplyPage:
时,调用该__init__()
方法时不带所需的projectlistscreen
参数。我建议修改__init__()
方法,使projectlistscreen
akwarg
参数为:另外,我从前面的问题中识别出了您的代码,您再次犯了我在前面的文章中指出的错误。您的代码:
正在创建一个
ProjectListScreen
、一个WindowManager
和一个ApplyPage
。这些都没有被实际使用过守则:
生成与上面相同的
Widgets
,但实际上使用了这些,因为sm
是由build()
方法返回的我会从.kv文件中删除那个东西
并将其从Python中删除
并将其从ApplyPage类中删除
您所需要的就是:
您可以使用方法更改其他类中的屏幕,但需要将在build方法中创建的对象发送到该类。因此,调用该方法类似于:
不要忘了在.kv文件中写入ProjectListScreen类的名称
相关问题 更多 >
编程相关推荐