我想用python代码做一个按钮go 到上一个屏幕,问题是它使用的是默认的过渡动画(从左到右),看起来很奇怪.我在处理这个文件时没有遇到任何问题,但是在这个特定的屏幕中,我必须使用Python代码来更改该属性.我想让它从右到左,因为默认的动画看起来很奇怪.

我在KV文件中这样做:

root.manager.transition.direction = "right"

我试过了:

back_button.on_release = lambda: setattr(self.manager, "transition", "right"),但这不是这样的:)

完整的屏幕代码:

class Contraindicaciones(MDScreen):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # Scrollview
        self.scrollview_contraindicaciones = MDScrollView(size_hint=(1, None), size = (Window.width, Window.height))

        # GridLayout
        layout_contraindicaciones = MDGridLayout(orientation = "lr-tb", spacing = "60dp", padding = "20dp", size_hint_x = 1, size_hint_y = None, cols = 2)
        layout_contraindicaciones.bind(minimum_height = layout_contraindicaciones.setter("height"))

        # Go Back Button:
        invisible_label1 = MDLabel(text = "")
        invisible_label1.size_hint_y = None
        invisible_label1.size_hint_x = 0.5
        invisible_label1.height = dp(50)

        back_button_layout = MDBoxLayout(orientation = "vertical")
        back_button = MDFillRoundFlatButton(text = "Anterior", font_name = "fonts/Lato-Bolditalic.ttf")
        back_button.haling = "left"
        back_button.size_hint_y = None
        back_button.size_hint_x = 0.5

        back_button.on_release = lambda: setattr(self.manager, "transition", "right")
        back_button.on_release = lambda: setattr(self.manager, 'current', 'c_t')


        back_button_layout.add_widget(back_button)
        layout_contraindicaciones.add_widget(back_button_layout)
        layout_contraindicaciones.add_widget(invisible_label1)

        #title
        title_label = MDLabel(text = "Contraindicaciones", halign="left")
        title_label.font_size = "15dp"
        title_label.size_hint_y = None
        title_label.size_hint_x = 1
        title_label.font_name = "fonts/Lato-Bolditalic.ttf"
        title_label.height = dp(50)

        # Invisible Label
        invisible_label2 = MDLabel(text = "")
        invisible_label2.size_hint_y = None
        invisible_label2.size_hint_x = 0.25
        invisible_label2.height = dp(50)

        # Title and Invisible Label to not mess the rest up
        layout_contraindicaciones.add_widget(title_label)
        layout_contraindicaciones.add_widget(invisible_label2)

        contraindicaciones = ["Hemorragia intracraneal (HIC) previa", "Lesión vascular cerebral estructural conocida",
        "Neoplasia intracraneal maligna conocida ya sea primaria o metastásica", "Accidente cerebrovascular isquémico en un plazo de 3 meses",
        "Sospecha de disección aórtica", "Hemorragia activa o diátesis hemorrágica", "Traumatismo craneoencefálico cerrado importante o traumatismo facial en los últimos 3 meses",
        "Cirugía intracraneal o intramedular en un plazo de 3 meses", "Hipertensión no controlada grave", "En caso de estreptoquinasa, el tratamiento previo debe ser dentro de los 6 meses previos"]

        for contraindicacion in contraindicaciones:
            size_checkbox = dp(32)
            size_labels = dp(12)
            checkbox = MDCheckbox(size_hint = (0.5, None), size = (size_checkbox, size_checkbox))
            label = MDLabel(text = contraindicacion, size_hint = (0.5, None), size = (size_labels, size_labels))
            label.font_name = "fonts/Lato-Italic.ttf"
            layout_contraindicaciones.add_widget(label)
            layout_contraindicaciones.add_widget(checkbox)

        # Button and invisible label
        invisible_label3 = MDLabel(text = "")
        invisible_label3.size_hint_y = None
        invisible_label3.size_hint_x = 0.5
        invisible_label3.height = dp(50)

        next_button = MDFillRoundFlatButton(text = "Continuar", font_name = "fonts/Lato-Bolditalic.ttf")
        next_button.haling = "right"
        next_button.size_hint_y = None
        next_button.size_hint_x = 0.5
        next_button.on_release = lambda: setattr(self.manager, 'current', 't_y')

        layout_contraindicaciones.add_widget(invisible_label3)
        layout_contraindicaciones.add_widget(next_button)

        #Se agrega Grid a Scroll
        self.scrollview_contraindicaciones.add_widget(layout_contraindicaciones)
        self.add_widget(self.scrollview_contraindicaciones)

以下是屏幕管理器和应用程序的代码:

class WindowManager(MDScreenManager):
    pass
class PatricApp(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.previous_screen = ""
    def build(self):
        Window.clearcolor = (255,255,255,255)
        self.root_widget = Builder.load_file("patric.kv")
        return self.root_widget
    def show_time_picker(self):
        time_dialog = MDTimePicker()
        time_dialog.open()

if __name__ == "__main__":
    PatricApp().run()

推荐答案

您为next_button.on_release分配了两次回调,因此您是在用更改屏幕的回调覆盖旨在更改过渡的回调.

您可以使用"普通"函数/方法作为回调,并对其执行这两个操作.另一方面,您必须修改self.manager.transition.direction而不是self.manager.transition.

class Contraindicaciones(MDScreen):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # ...
        back_button.bind(on_release = self.back)
        # ...

    def back(self, *_):
        self.manager.transition.direction = "right"
        self.manager.current = 'c_t'

Python相关问答推荐

如何随着收件箱的增加动态添加到HTML表的右下角?

获取2个字节之间的异或

使用unmanagedexports从Python调用的c#DLC

Python:根据创建时间合并两个收件箱

带有Postgres的Flask-Data在调用少量API后崩溃

解析讨论论坛只给我第一个用户 comments ,但没有给我其他用户回复

Pandas使用过滤器映射多列

在Python中,如何才能/应该使用decorator 来实现函数多态性?

键盘.任务组

如何判断LazyFrame是否为空?

已删除的构造函数调用另一个构造函数

PyQt5如何将pyuic 5生成的Python类添加到QStackedWidget中?

阅读Polars Python中管道的函数定义

使用多个性能指标执行循环特征消除

在使用Guouti包的Python中运行MPP模型时内存不足

numba jitClass,记录类型为字符串

如果值不存在,列表理解返回列表

实现自定义QWidgets作为QTimeEdit的弹出窗口

在嵌套span下的span中擦除信息

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?