【问题标题】:How can i make sure that every time i press a button in my kivy app a page gets run again我如何确保每次在我的 kivy 应用程序中按下按钮时,页面都会再次运行
【发布时间】:2020-10-15 18:23:48
【问题描述】:

下面的代码是我的应用程序的页面之一。文件 usernames.txt 使用我单击的按钮的帐户名称进行更新。问题是,只要我运行代码,get user_dates() 函数就会被激活。所以它得到了我上次登录的用户名,因此它得到了错误的日期。我如何确保一旦我输入我的帐户,此页面会再次重新加载,并且 user_dates() 会获取更新的用户名,以便它进入正确的文件夹并选择正确的日期?

class DatesPage(FloatLayout):
    def __init__(self, **kwargs):
        super(DatesPage, self).__init__(**kwargs)
        self.all_dates, self.username = self.get_user_dates()
        print(self.username)
        self.dates_dict = {}
        self.butt_height = 0.7
        for x in range(len(self.all_dates)):
            self.dates_dict[x] = Button(text=self.all_dates[x], size_hint=(0.2, 0.1),
            pos_hint={'x':0.15, 'y':self.butt_height})
            self.add_widget(self.dates_dict[x])
            self.butt_height -= 0.1
    def get_user_dates(self):
        with open('.\\req files\\usernames.txt', 'r') as file:
            username = file.read()
        for root, folders, files in os.walk(f'.\\req files\\{username}'):
            files = files
        files = [re.sub('.txt', '', file) for file in files]
        return files, username

【问题讨论】:

    标签: python-3.x user-interface kivy multipage


    【解决方案1】:

    我不是 100% 确定我理解了您的问题,但我认为您想要的是每次进入帐户页面时都获得更新的页面,因此只有在您进入我的帐户时才调用 user_dates() 方法。

    好吧,如果那是您尝试做的事情,我认为您的代码的问题在于您将所有代码放在 DatesPage 类的 init 方法中,并且因为 kivy 初始化了所有 init 启动时所有它的小部件的方法,这会导致您的代码在 kivy 启动时自动运行。

    如果这不是您想要的,那么您应该将代码放在 init 方法以外的方法中,并将事件或按钮事件绑定到该方法的回调。

    因此,当您按下该按钮进入我的帐户时,绑定的事件回调将运行该方法并执行此处的代码,因此我的帐户页面将在您打开时更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      相关资源
      最近更新 更多