【问题标题】:I want to call a screen from python file in kivy builder format我想以 kivy builder 格式从 python 文件调用屏幕
【发布时间】:2021-08-29 11:15:56
【问题描述】:

基本上,我正在编写生成器格式的代码,但我需要为我的表格屏幕使用 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 文件中对它们进行编码。第一个屏幕上的按钮应将我引导至表格屏幕,但我无法对其进行编码。请帮忙。

【问题讨论】:

    标签: python kivy kivy-language kivymd


    【解决方案1】:

    你犯了两个错误

    1. 你是不是没有给网名'table'
    2. 您没有将屏幕添加到根窗口小部件 所以这段代码应该适合你
    
    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()
    
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      相关资源
      最近更新 更多