python - Kivy:AttributeError:'super'对象在尝试在kivy中加载数据表时没有属性'__getattr__'
问题描述
我正在尝试将数据表加载到具有 3 个屏幕的 kivy 应用程序中。第一个屏幕是登录屏幕,第二个屏幕是“开始”按钮,用户单击“开始”按钮后,用户将被引导到可以看到数据表的第三个屏幕。为了加载信息,我为它创建了 1 个单独的 kivy 文件。现在在第三个屏幕中,我想添加一个数据表,它将显示数据以显示给用户。
根据 kivy 文档,我们只能在主程序中添加数据表,而不是在 .kv 文件中,但在我的情况下,我已经有一个 .kv 文件。我在将数据表加载到我的第三个屏幕时遇到了一些麻烦。任何帮助,将不胜感激。
class Screen1(Screen):
pass
class Screen2(Screen):
pass
class Screen3(Screen):
pass
class MyMainApp(MDApp):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.data_tables = None
def build(self):
self.kv = Builder.load_file("main1.kv")
return self.kv
def add_datatable(self):
count = 1
self.data_tables = MDDataTable(pos_hint={"center_x": 0.5, "center_y": 0.65},
size_hint=(0.85, 0.6),
check = True,
rows_num = 5,
use_pagination = True,
pagination_menu_height = "240dp",
column_data=[
("No.", dp(18)),
("Tools",dp(20)),
("Slot Number", dp(20)),
("Condition", dp(20)),
("Date Processed", dp(20)),
("Time Processed", dp(20))
],
row_data=[
(count, "Kuglen", "1", "Good", "1-Aug", "4pm"),
(count+1, "Mushroom", "2", "Bad", "5-Aug", "2pm"),
]
)
self.root.ids.data_scr.ids.data_layout.add_widget(self.data_tables)
def change_screen(self, screen: str):
self.root.current = screen
if __name__ == "__main__":
MyMainApp().run()
##基维。Screen1 的 Kivy 代码如下所示,因为它与焦点问题无关。
<Screen2>:
name: "realtime_start"
Button:
text: "START PROCESSING"
font_size: "25sp"
size_hint: (0.3,0.3)
pos_hint: {"center_x": 0.5, "center_y": 0.5}
font_name: "BPoppins"
color: rgba(255, 255, 255, 255) #Text color
background_color: 0.5, 0.5, 0.2, 0.2 #Box's color
canvas.before:
Color:
rgb: rgba(57, 104, 128, 255)
RoundedRectangle:
size: self.size
pos: self.pos
radius: [15]
on_release:
app.change_screen("realtime_tools")
app.add_datatable()
root.start_button()
<Screen3>:
name: "realtime_tools"
MDFloatLayout:
md_bg_color: 1,1,1,1
AnchorLayout:
id: data_layout
解决方案
请重点...
1 - 如果我复制/粘贴您的代码,它不起作用/我没有同样的问题(我应该停在那里)。
2 -self.root.ids.data_scr.ids.data_layout.add_widget(self.data_tables)
在一个糟糕的地方使应用程序崩溃。
3 - 您加载了“main1.py”,但没有代表主应用程序的代码,只有小部件类............
4 - “开始处理”按钮让我崩溃,我删除了所有无用的东西,它工作。
5 - 我从未遇到过您收到的错误消息。
6 - 我可以让你的代码工作,但该死,你错过了很多东西......
这个问题是胡说八道,专注于你想要的。当我看到您遇到的错误时,您应该回到 kivy 教程,学习如何提出问题并制作一个最小的工作应用程序来代表您的问题。
祝你好运。:)
推荐阅读
- node.js - Node - npm -v 和真实版本的区别
- c# - 如何使用 C# 在 Google 电子表格上创建图表?
- python - 无法在 Windows 10 中启动 Spyder
- verilog - 如何以现实的方式实现存储字节和存储半字
- java - 在等待来自客户端的 channel.basicAck 时,通道可以保持活动多长时间
- kotlin - KotlinNullPointerException 和 Java 的 NullPointerException 有什么区别
- android - 如果没有可用的结果,Room 返回 IndexOutOfBoundException
- javascript - 如何修复 Cakephp3 错误页面重定向问题
- watchkit - 在 watchOS 6 上填充“正在播放”屏幕
- angular - 获得 2 个 Observables 的结果,但在处理第一个 Observables 的结果之后