2017-01-05 62 views
1

我是Python的新手。我想用Tkinter創建一個程序,它從條目「box」中輸入條目,然後將它的每個字符與charset進行比較,最後彈出一個顯示短語的消息框。我幾乎完成,但我不能讓這條作業線:如何從菜單彈出消息框?

info_menu.add_command(label="About", 
         command=messagebox.showwarning(message="Creator: GakPower\nVersion: 1.0.0\nCreated at 1/5/2017") 

全碼:

from tkinter import ttk 
from tkinter import * 
from tkinter import messagebox 
import string as s 


class Bruteforcer: 

    def output(self, result): 
     self.result = result 
     if result == "": 
      messagebox.showwarning(title="Enter a Phrase", 
            message="Please enter a Phrase!") 
     else: 
      messagebox.showinfo(title="Phrase Found!", 
           message=("The process completed Successfully!\n The Phrase Found!!!!\n", result)) 

    def submit_button_pressed(self): 
     entry_val = self.entry_value.get() 
     charset = list(s.ascii_letters + "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω" + s.digits + s.punctuation) 
     result = "" 
     x = 0 
     while x <= len(entry_val)-1: 
      echar = entry_val[x] 
      for char in charset: 
       if char == echar: 
        result += echar 
        x += 1 
        break 
     return self.output(result) 

    def __init__(self, root): 

     self.entry_value = StringVar(root, "") 

     self.the_menu = Menu(root) 
     info_menu = Menu(self.the_menu, tearoff=0) 
     **info_menu.add_command(label="About", 
           command=messagebox.showwarning(message="Creator: GakPower\nVersion: 1.0.0\nCreated at 1/5/2017")** 
          ) 
     info_menu.add_separator() 
     info_menu.add_command(label="Quit", command=root.quit) 
     self.the_menu.add_cascade(label="Info", menu=info_menu) 
     root.config(menu=self.the_menu) 

     text_fond = StringVar() 
     text_fond.set("Times") 

     root.title("Graphical Bruteforcer") 
     root.geometry("500x500") 
     root.resizable(width=False, height=False) 
     style = ttk.Style() 
     style.configure("TButton", 
         foreground="red", 
         fond="Times 20", 
         padding=10) 

     style.configure("TEntry", 
         foreground="red", 
         fond="Times 20", 
         padding=10) 
     style.configure("TLabel", 
         foreground="red", 
         fond="Times 35 Bold") 
     # ---------- Entry ----------- 
     self.entry_value = ttk.Entry(root, 
            textvariable=self.entry_value, width=25, state="normal") 
     self.entry_value.grid(row=1, columnspan=2) 
     # ---------- Label ---------- 
     self.secret_label = ttk.Label(root, 
             text="The Secret Phrase").grid(row=0, column=0) 
     # ---------- Button --------- 
     self.button_submit = ttk.Button(root, 
             text="Submit", command=self.submit_button_pressed) 
     self.button_submit.grid(row=1, column=2) 
root = Tk() 

brute = Bruteforcer(root) 

root.mainloop() 
+1

請解決你的問題的格式。閱讀非常困難。 –

+0

編輯問題並使用按鈕'{}'來正確格式化代碼。 – furas

+0

'command ='期望沒有'()'和參數的函數,所以用你的消息創建函數並且只使用它的名字作爲參數即。 'command = my_function'或使用'lambda'來創建函數'command = lambda:messagebox.showwarning(..)'。現在你的消息在啓動時被執行,並且它的結果被分配給'command =' – furas

回答

0

由於furas在評論中說,command=預期的功能。所以,你應該更換

info_menu.add_command(label="About", 
         command=messagebox.showwarning(message="Creator: GakPower\nVersion: 1.0.0\nCreated at 1/5/2017")) 

通過類似

def show_about(): 
    ''' show the about messagebox ''' 
    messagebox.showwarning(message="Creator: GakPower\nVersion: 1.0.0\nCreated at 1/5/2017") 

info_menu.add_command(label="About", command=show_about)