2013-05-04 55 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

相關問題