我正在尝试创建一个kivy应用程序,在第一个屏幕中,用户可以使用FileChooserIconView选择一个json配置文件。有一个空标签,它将通过将其内容转换为Python字典来显示JSON文件的内容。下面是我的方法,但我总是得到FileChooserIconViewer的on_submit属性的错误。
我得到的错误是在self.load_json_file
上,它说:
Type "(file_chooser: Unknown, selection: Unknown) -> None" cannot be assigned to type "(selected: Unknown, touch: Unknown | None = None) -> None"
Parameter name mismatch: "selected" versus "file_chooser"
Parameter name mismatch: "touch" versus "selection"
Parameter "selection" is missing default
这是我的main.py
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
import json
from kivy.uix.filechooser import FileChooserListView, FileChooser, FileChooserIconView
from plyer import filechooser
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.popup import Popup
class TestWindow(Screen):
def selected(self, filename):
try:
with open("data.json") as f:
data = json.load(f)
self.json_text = str(data)
except FileNotFoundError:
self.json_text = "Error: File not found"
def show_file_chooser(self):
file_chooser = FileChooserIconView()
file_chooser.filters = ["*.json"]
file_chooser.path = '.'
file_chooser.on_submit = self.load_json_file
popup = Popup(title= 'Select config json', content = file_chooser, size_hint=(0.8, 0.8))
popup.open()
def load_json_file(self, file_chooser, selection):
if selection:
file_path = selection[0]
with open(file_path, 'r') as file:
json_dict = json.load(file)
self.ids.json_label.text = str(json_dict)
class WelcomeWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
kv = Builder.load_file("Cluster.kv")
class ClusterApp(App):
def build(self):
# Window.clearcolor = (1, 1, 1, 1)
return kv
if __name__ == "__main__":
ClusterApp().run()
这是我的集群.kv:
WindowManager:
TestWindow
WelcomeWindow
<TestWindow>
name: "test"
GridLayout:
cols: 1
Button:
text: "select json config"
on_release: root.show_file_chooser()
Label:
id: json_content
text: ""
<WelcomeWindow>:
name: "welcome"
BoxLayout :
orientation : "vertical"
spacing: dp(50)
size_hint: 0.5, 0.5
pos_hint: {"center_x" : 0.5, "center_y" : 0.5}
Button:
text: "start clustering"
Button:
text : "Settings"
on_release:
app.root.current = "settings"
root.manager.transition.direction = "right"
请有人提出一个方法来做到这一点。我是kivy的新手,网上没有足够的资源来讨论如何在kivy中处理json文件。一些关于同样的资源也会很棒。多谢了!
1条答案
按热度按时间ws51t4hk1#
load_json_file()
方法的方法签名不正确。尝试更改:致: