python - 我想以 kivy builder 格式从 python 文件调用屏幕
问题描述
基本上,我正在编写生成器格式的代码,但我需要为我的表格屏幕使用 python 代码。在 kivy 字符串文件中执行按钮时,我不知道如何调用表格屏幕打开。这是相同的最小工作代码:
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()
关于项目的信息:我想将表链接到在线数据库。其他功能不是动态的,所以我一直在 .kv 文件中对它们进行编码。第一个屏幕上的按钮应将我引导至表格屏幕,但我无法对其进行编码。请帮忙。
解决方案
你犯了两个错误
- 是你没有给网名'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()
推荐阅读
- mysql - SQL:如何为主键生成唯一值
- node.js - 在数组映射期间将剩余的数组对象从一个组件转移到另一个组件
- c# - 为什么在这种情况下 SaveAllAsync() > 0 false?
- python - django模型表单将数据保存到多个模型
- api - 从 Outlook api 中的 InternetMessageHeader 获取特定值
- kubernetes - 为 Deployment.spec.strategy 引发 Helm 验证错误
- woocommerce - 在 Woocommerce API 中,哪个钩子用于 webhook 的特定订单状态?
- python - 将 Django 连接到 Postgresql 数据库的问题
- c++ - 如何在堆排序中使用用户输入数组
- reactjs - 如何更新动作创建者中的值 - 反应