【问题标题】:'Back' Button not functioning in Python with Kivy“后退”按钮在带有 Kivy 的 Python 中不起作用
【发布时间】:2019-08-06 14:50:28
【问题描述】:

我正在尝试使用功能返回按钮将用户带回主屏幕,如下所示为“社交”,但似乎无法使其正常工作。我已经尝试了在此站点和其他一些站点上找到的多种解决方案,但似乎还没有解决问题。

我已经尝试了多种解决方案,我在这个网站和其他一些网站上找到了,但似乎还没有解决这个问题。我目前正在尝试避免使用 Kivy 文件,但我已经接受了在某些时候我将不得不制作一个。

#Main Screen
class Social(GridLayout):
    title = "Welcome To PedaShield"
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        self.cols = 3
        #FB 'Icon'
        self.facebook = Button(text="Facebook")
        self.facebook.bind(on_press=self.fb_signin)
        self.add_widget(self.facebook)
#Button for Facebook Screen     
    def fb_signin(self, instance):
        datastop.screen_manager.current = "FBSignin"

#Create FB sign-in screen w/ options
class FBSignin(GridLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        self.cols = 4
        if os.path.isfile("fbprev_details.txt"):
            with open("fbprev_details.txt", "r") as f:
                d = f.read().split(",")
                prev_username = d[0]
                prev_password = d[1]
        else:
            prev_username = ""
            prev_password = ""
    #row 1
        self.add_widget(Label())
        self.add_widget(Label(text="Username: "))
        self.username = TextInput(text=prev_username, multiline=False)
        self.add_widget(self.username)
        self.add_widget(Label())
    #row 2
        self.add_widget(Label())
        self.add_widget(Label(text="Password: "))
        self.password = TextInput(text=prev_password, multiline=False)
        self.add_widget(self.password)
        self.add_widget(Label())
    #row 3 include checkbox for saving signin
        self.add_widget(Label())
        self.signin = Button(text="Sign In")
        self.signin.bind(on_press=self.signin_button)
        self.add_widget(self.signin)
        self.goback = Button(text="Back")
        self.signin.bind(on_press=self.go_back)
        self.add_widget(self.goback)
        self.add_widget(Label())
    #sign-in button    
    def signin_button(self, instance):
        username = self.username.text
        password = self.password.text
        print("Signing in as {username}")
        with open("fbprev_details.txt","w") as f:
            f.write(f"{username},{password}")
    #Back button
    def go_back(self, instance):
        print('Here')
        datastop.screen_manager.current = "Social"

class PedaShield(App):
    title = "PedaShield"
    def build(self):
        self.screen_manager = ScreenManager()
    #Main screen with Social Media Options
        self.Social = Social()
        screen = Screen(name='Social')
        screen.add_widget(self.Social)
        self.screen_manager.add_widget(screen)
    #Facebook sign in/option page
        self.fb_signin = FBSignin()
        screen = Screen(name="FBSignin")
        screen.add_widget(self.fb_signin)
        self.screen_manager.add_widget(screen)

        return self.screen_manager

if __name__ == "__main__":
    datastop = PedaShield()
    datastop.run()

我没有任何可追踪的信息,只是按下“返回”按钮时没有任何反应。

【问题讨论】:

  • 你的意思是datastop?这就是你在其他地方输入的方式
  • 您似乎在代码中打错了字。您使用datatop 作为变量,它没有在任何地方定义。另一方面是datastop
  • 我在这里修好了。我以前做对了,但错误仍然存​​在。谢谢大家指出!

标签: python button kivy


【解决方案1】:

您将功能go_back 分配给按钮self.signin

    self.signin.bind(on_press=self.go_back)

但必须是self.goback

    self.goback.bind(on_press=self.go_back)

在旧代码中,当您单击“登录”按钮时,您可以看到两个字符串

Here
Signing in as {username}

第一个文本来自函数go_back。这应该可以让您知道问题出在哪里

【讨论】:

  • 谢谢!我不知道我是如何一遍又一遍地错过的,但问题现在已经解决了!感谢您发现我的菜鸟错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 2014-05-06
相关资源
最近更新 更多