AppJar按钮链接到错误的功能

时间:2018-04-10 11:26:21

标签: python user-interface

简而言之,GUI按钮似乎与错误的功能相关联。 我已经开始创建一个Vigenere密码。用于重定向到加密功能的按钮改为重定向到解密功能。 W /我当前的代码没关系,因为这两个代码几乎相同,但它们最终会有不同的用途,因此需要相互区分。

我不确定问题出在哪里,所以附上整个代码。

    from appJar import gui
    app = gui("Vigenere Chipher")
    app.addLabel("title", "Vigenere Chipher")
    app.setBg("cyan")
    app.setSize(600,400)

    def press(Encrypt):
        app.removeAllWidgets()
        app.addLabel("title", "Encryption")
        app.addEntry("Phrase")
        app.setEntryDefault("Phrase", "Enter Phrase Here") 
        app.addEntry("Key")
        app.setEntryDefault("Key", "Enter Key Here")
        app.addLabel("RESULT", "This is your encrypted message: ")

        def press(Submit):
            phrase = app.getEntry("Phrase")
            key = app.getEntry("Key")        

        def press(Back):
            app.removeAllWidgets()
            app.addLabel("title", "Vigenere Chipher")
            app.setBg("cyan")
            app.setSize(600,400)

        app.addButtons(["Submit", "Back"], press)

    def press(Decrypt):
        app.removeAllWidgets()
        app.addLabel("title", "Decryption")
        app.addEntry("Phrase")
        app.setEntryDefault("Phrase", "Enter Phrase Here") 
        app.addEntry("Key")
        app.setEntryDefault("Key", "Enter Key Here")
        phrase = app.getEntry("Phrase")
        key = app.getEntry("Key")
        app.addLabel("RESULT", "This is your decrypted message: ")

        def press(Back):
            app.removeAllWidgets()
            app.addLabel("title", "Vigenere Chipher")
            app.setBg("cyan")
            app.setSize(600,420)
            app.addButtons(["Encrypt", "Decrypt", "Close"], press)

        app.addButtons(["Submit", "Back"], press)    



    app.addButtons(["Encrypt", "Decrypt", "Close"], press)



    app.go()

谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

您已定义了多个具有相同名称press的功能。只使用最后一个定义(解密的定义),因为它将取代之前的定义 - 这不是你想要的。

然后,您已将所有按钮链接到此功能。

所以,你需要改变的第一件事就是给每个函数赋予它自己的名字:

def encrypt()
    ...
def decrypt()
    ...

然后,您需要更改将按钮链接到该功能的方式。

您有两种选择:

1)有一个通用的按下功能,它使用按钮名称上的IF语句来确定动作:

def press(btn):
    if btn == "Encrypt":
        encrypt()
    elif btn == "Decrypt":
        decrypt()
    elif btn == "Close":
        app.stop()

app.addButtons(["Encrypt", "Decrypt", "Close"], press)

2)直接将每个按钮链接到正确的功能。

app.addButtons(["Encrypt", "Decrypt", "Close"], [encrypt, decrypt, app.stop])

稍后,您会遇到Submit&的问题。 Back按钮,需要使用相同的策略......