2013-05-04 52 views
1

所以,我现在在一个个人项目(只是为了尝试自己)与python + tkinter。它是一个加密器,它意味着它获得一段文本并使用一些着名的密码(如数字密码,凯撒的密码等)加密它。
现在,我想让用户选择保存他加密的文本以及程序生成的加密文本。为此,我在程序菜单上创建了两个checkbutton:一个用于“保存文本”,另一个用于“保存加密文本”。我的问题是,我试图附加一个函数,因为它的命令选项,所以,我猜它应该运行该功能时,单击该选项。但它没有发生。
我只会解释在传递代码之前,什么是功能。
他们应该提示一个问题,询问用户他/她是否真的想用文本和加密文本创建一个文本文件(这不是数据库,它只是供用户稍后阅读文本的他/她加密和加密版本,如果他/她想的话)。 所以,代码:如何在Python + Tkinter中使用菜单checkbutton来调用函数?

encryptermenu = Menu(menubar, tearoff=0) 
encryptermenu.add_checkbutton(label="Save Text", variable=v, command=saveText) 
encryptermenu.add_checkbutton(label="Save Encrypted Text", variable=w, command=saveEncryptedText) 
menubar.add_cascade(label="Encrypter", menu=encryptermenu) 

的checkbutton选项,现在的功能:

def saveText(): 
    sdtst = messagebox.askyesno(title="Save Text", message="A .txt file will be created at the same directory as this program to save the text you decided to encrypt. Is it ok?") 

def saveEncryptedText(): 
    sdtset = messagebox.askyesno(title="Save Encrypted Text", message="A .txt file will be created at the same directory as this program to save the encrypted text generated by this program. Is it ok?") 

如若真的checkbutton上运行单击该功能还是我刚才做的混乱呢? 无论如何,希望有人会帮助我。

+0

是它所有的代码?有没有错误信息?代码似乎对我来说正确。除了一件事情:为什么使用'add_checkbutton'而不是'add_command'? – kalgasnik 2013-05-04 09:20:27

+0

没有错误信息,唯一的问题是没有任何反应。 checkbutton选项是创建一个可切换的菜单选项,所以它在打开时显示一个打勾,而不打开时不打开。我决定使用它,因为我希望在文本或加密文本被保存时留下勾号,以便用户知道。 – AugustoQ 2013-05-04 19:17:18

回答

1

要回答你的具体问题,是的,当你点击checkbutton时,函数会被调用。

您应该在菜单上调用add_command而不是add_checkbutton。使用检查按钮从菜单中调用某个功能非常不寻常,并且可能会混淆用户。

+0

事情是,我要做的是那些按钮在活动时会打勾,所以用户可以知道它何时处于活动状态,何时不活动。但正如我从你的理解回答,我相信菜单上的checkbutton不能调用一个函数,是吗?无论如何,感谢您的帮助。 – AugustoQ 2013-05-04 19:13:54

+0

嗯,我决定不再提示用户了,所以我的checkbuttons不需要调用一个函数。 – AugustoQ 2013-05-04 19:54:08

+0

@AugustoQ:不,你误解了。我清楚地说过,即使你使用checkbutton,也应该调用函数_should_。 – 2013-05-04 20:54:54

1

Checkbutton Menu绝对可以调用一个函数。这就是检查按钮选项:)

我通常使用2个函数来处理来自checkbutton菜单的调用。

首先创建一个菜单,并将其分配给一个布尔VAR

yesno = BooleanVar(root) 
mymenu.add_checkbutton(label="Do this ?", variable=yesno, command=mytoggle) 

则需要2个功能: 1)一个回调来切换 2)一个处理是

def mytoggle(event=None): 
    val = yesno.get() 
    if val: 
     dosomething() 
    else: 
     somethingelse() 
+0

不过,当我点击检查按钮选项时,没有任何反应。它应该提示一个消息框。我创建了一个调用消息框的函数和一个单击该选项的函数,但是当我单击它时没有任何反应。此外,它不显示任何错误消息或任何内容,它只是不会发生。 – AugustoQ 2013-05-06 02:50:37

+0

@AugustoQ:你可以随时通过在每个控制线上打印出你的代码来检查你的代码在哪里。例如,在def mytoggle中,在val = yesno.get()之后,可以打印val'print val'的值以查看检查按钮传递给变量'val'的值 – oat 2013-05-06 06:06:48

相关问题