我想从 python 文件中以 kivy builder 格式调用屏幕
I want to call a screen from python file in kivy builder format
基本上,我正在以生成器格式编写代码,但我需要为我的 table 屏幕使用 python 代码。我不知道如何在 kivy 字符串文件中执行按钮时调用 table 屏幕打开。这是相同的最小工作代码:
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.uix.datatables import MDDataTable
from kivy.metrics import dp
Window.size = (350,600)
class FirstWindow(Screen):
pass
class SecondWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
kv="""
WindowManager:
FirstWindow:
<FirstWindow>:
name: "first"
MDRoundFlatButton:
text: "SIGN UP"
font_size: 12
pos_hint: {"center_x": 0.5,"center_y": 0.3}
on_release:
app.root.current = "table" # I Want to call Table screen Here
root.manager.transition.direction = "left"
"""
class MainApp(MDApp):
def build(self):
screen = Screen()
table = MDDataTable(pos_hint={'center_x': 0.5, 'center_y': 0.5},size_hint=(0.9, 0.6),check=True,column_data=[("First Name", dp(30)),("Last Name", dp(30)),("Email Address", dp(30)),("Phone Number", dp(30))],row_data=[("John", "Elder", "zzz@xyz.com", "(123) 456-1111"),("Mary", "Elder", "yyy@xyz.com", "(123) 456-1111")])
# Bind the table
table.bind(on_check_press=self.checked)
table.bind(on_row_press=self.row_checked)
self.theme_cls.theme_style = "Light"
self.theme_cls.primary_palette = "BlueGray"
screen.add_widget(table)
return Builder.load_string(kv) # the table screen should be called from within
# Function for check presses
def checked(self, instance_table, current_row):
print(instance_table, current_row)
# Function for row presses
def row_checked(self, instance_table, instance_row):
print(instance_table, instance_row)
MainApp().run()
项目信息: 我想link table 到网上资料库。其他功能不是动态的,所以我一直在 .kv 文件中对它们进行编码。第一个屏幕上的按钮应该会引导我进入 table 屏幕,但我无法对其进行编码。请帮忙
你犯了两个错误
- 你是不是没给网名'table'
- 您没有将屏幕添加到根小部件
所以这段代码应该适合你
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.uix.datatables import MDDataTable
from kivy.metrics import dp
Window.size = (350, 600)
class FirstWindow(Screen):
pass
class SecondWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
kv = """
WindowManager:
FirstWindow:
<FirstWindow>:
name: "first"
MDRoundFlatButton:
text: "SIGN UP"
font_size: 12
pos_hint: {"center_x": 0.5,"center_y": 0.3}
on_release:
app.root.current = "table" # I Want to call Table screen Here
root.manager.transition.direction = "left"
"""
class MainApp(MDApp):
def build(self):
# naming the screen
screen = Screen(name='table')
table = MDDataTable(pos_hint={'center_x': 0.5, 'center_y': 0.5}, size_hint=(0.9, 0.6), check=True,
column_data=[("First Name", dp(30)), ("Last Name", dp(30)), ("Email Address", dp(30)),
("Phone Number", dp(30))],
row_data=[("John", "Elder", "zzz@xyz.com", "(123) 456-1111"),
("Mary", "Elder", "yyy@xyz.com", "(123) 456-1111")])
# Bind the table
table.bind(on_check_press=self.checked)
table.bind(on_row_press=self.row_checked)
self.theme_cls.theme_style = "Light"
self.theme_cls.primary_palette = "BlueGray"
screen.add_widget(table)
# load the root widget
root= Builder.load_string(kv) # the table screen should be called from within
# add the screen to the root widget
root.add_widget(screen)
return root
# Function for check presses
def checked(self, instance_table, current_row):
print(instance_table, current_row)
# Function for row presses
def row_checked(self, instance_table, instance_row):
print(instance_table, instance_row)
MainApp().run()
基本上,我正在以生成器格式编写代码,但我需要为我的 table 屏幕使用 python 代码。我不知道如何在 kivy 字符串文件中执行按钮时调用 table 屏幕打开。这是相同的最小工作代码:
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.uix.datatables import MDDataTable
from kivy.metrics import dp
Window.size = (350,600)
class FirstWindow(Screen):
pass
class SecondWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
kv="""
WindowManager:
FirstWindow:
<FirstWindow>:
name: "first"
MDRoundFlatButton:
text: "SIGN UP"
font_size: 12
pos_hint: {"center_x": 0.5,"center_y": 0.3}
on_release:
app.root.current = "table" # I Want to call Table screen Here
root.manager.transition.direction = "left"
"""
class MainApp(MDApp):
def build(self):
screen = Screen()
table = MDDataTable(pos_hint={'center_x': 0.5, 'center_y': 0.5},size_hint=(0.9, 0.6),check=True,column_data=[("First Name", dp(30)),("Last Name", dp(30)),("Email Address", dp(30)),("Phone Number", dp(30))],row_data=[("John", "Elder", "zzz@xyz.com", "(123) 456-1111"),("Mary", "Elder", "yyy@xyz.com", "(123) 456-1111")])
# Bind the table
table.bind(on_check_press=self.checked)
table.bind(on_row_press=self.row_checked)
self.theme_cls.theme_style = "Light"
self.theme_cls.primary_palette = "BlueGray"
screen.add_widget(table)
return Builder.load_string(kv) # the table screen should be called from within
# Function for check presses
def checked(self, instance_table, current_row):
print(instance_table, current_row)
# Function for row presses
def row_checked(self, instance_table, instance_row):
print(instance_table, instance_row)
MainApp().run()
项目信息: 我想link table 到网上资料库。其他功能不是动态的,所以我一直在 .kv 文件中对它们进行编码。第一个屏幕上的按钮应该会引导我进入 table 屏幕,但我无法对其进行编码。请帮忙
你犯了两个错误
- 你是不是没给网名'table'
- 您没有将屏幕添加到根小部件 所以这段代码应该适合你
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.uix.datatables import MDDataTable
from kivy.metrics import dp
Window.size = (350, 600)
class FirstWindow(Screen):
pass
class SecondWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
kv = """
WindowManager:
FirstWindow:
<FirstWindow>:
name: "first"
MDRoundFlatButton:
text: "SIGN UP"
font_size: 12
pos_hint: {"center_x": 0.5,"center_y": 0.3}
on_release:
app.root.current = "table" # I Want to call Table screen Here
root.manager.transition.direction = "left"
"""
class MainApp(MDApp):
def build(self):
# naming the screen
screen = Screen(name='table')
table = MDDataTable(pos_hint={'center_x': 0.5, 'center_y': 0.5}, size_hint=(0.9, 0.6), check=True,
column_data=[("First Name", dp(30)), ("Last Name", dp(30)), ("Email Address", dp(30)),
("Phone Number", dp(30))],
row_data=[("John", "Elder", "zzz@xyz.com", "(123) 456-1111"),
("Mary", "Elder", "yyy@xyz.com", "(123) 456-1111")])
# Bind the table
table.bind(on_check_press=self.checked)
table.bind(on_row_press=self.row_checked)
self.theme_cls.theme_style = "Light"
self.theme_cls.primary_palette = "BlueGray"
screen.add_widget(table)
# load the root widget
root= Builder.load_string(kv) # the table screen should be called from within
# add the screen to the root widget
root.add_widget(screen)
return root
# Function for check presses
def checked(self, instance_table, current_row):
print(instance_table, current_row)
# Function for row presses
def row_checked(self, instance_table, instance_row):
print(instance_table, instance_row)
MainApp().run()