2015-08-26 57 views
0

我的消息框的代碼不適用於我的窗口。一切工作,但是當我運行它時,我的「關於」消息框不會顯示。當我的窗口上單擊「關於」時,我希望我的消息框彈出。我能做些什麼來使它工作?消息框不起作用

from tkinter import * 
from tkinter import messagebox 
calculator = Tk() 
calculator.title("Calculator") 
calculator.geometry("317x145") 

menubar = Menu(calculator) 

class Calculator(Frame): 
    def __init__(self): 
     Frame.__init__(self) 
     display = Frame(calculator, bd=0, width=1000, height=1000, relief=SUNKEN) 
     buttons = Frame(calculator, bd=0, width=7, height=1, relief=GROOVE) 
     display.grid(column=0, row=0, padx=0, pady=0) 
     buttons.grid(column=0, row=1, padx=1) 
     numbers = StringVar() 
     self.results = Entry(display, textvariable=numbers, width=31, fg="DarkOrchid4", bg="lavender blush", font="Verdana") 
     self.results.pack() 
     self.results.grid(column=0, row=0) 

     def showup(x): 
      return lambda: self.results.insert(END, x) 

     numbers=["7", "4", "1", "8", "5", "2", "9", "6", "3"] 
     for i in range(9): 
      n=numbers[i] 
      Button(buttons, bg="snow", text=n, width=7, height=1, command=showup(n), relief=RAISED).grid(row=i%3, column=i//3) 

     Clear = Button(buttons, bg="snow", text="C", width=7, height=1, command=self.clear, relief=RAISED) 
     Clear.grid(padx=2, pady=2, column=3, row=0) 
     Equals = Button(buttons, bg="snow", text="=", width=7, height=1, command=self.equals, relief=RAISED) 
     Equals.grid(padx=2, pady=2, column=4, row=3) 
     All_clear = Button(buttons, bg="snow", text="AC", width=7, height=1, command=self.all_clear, relief=RAISED) 
     All_clear.grid(padx=2, pady=2, column=4, row=0) 
     Bracket_one = Button(buttons, bg="snow", text="(", width=7, height=1, command=self.bracket_one, relief=RAISED) 
     Bracket_one.grid(padx=2, pady=2, column=2, row=3) 
     Bracket_two = Button(buttons, bg="snow", text=")", width=7, height=1, command=self.bracket_two, relief=RAISED) 
     Bracket_two.grid(padx=2, pady=2, column=3, row=3) 
     Zero = Button(buttons, bg="snow", text="0", width=7, height=1, command=self.zero, relief=RAISED) 
     Zero.grid(padx=2, pady=2, column=0, row=3) 
     Decimal_point = Button(buttons, bg="snow", text=".", width=7, height=1, command=self.decimal_point, relief=RAISED) 
     Decimal_point.grid(padx=2, pady=2, column=1, row=3) 
     Multiplication = Button(buttons, bg="red", text="x", width=7, height=1, command=self.multiplication, relief=RAISED) 
     Multiplication.grid(padx=2, pady=2, column=3, row=1) 
     Division = Button(buttons, bg="powder blue", text="/", width=7, height=1, command=self.division, relief=RAISED) 
     Division.grid(padx=2, pady=2, column=4, row=1) 
     Addition = Button(buttons, bg="yellow", text="+", width=7, height=1, command=self.addition, relief=RAISED) 
     Addition.grid(padx=2, pady=2, column=3, row=2) 
     Subtraction = Button(buttons, bg="green", text="-", width=7, height=1, command=self.subtraction, relief=RAISED) 
     Subtraction.grid(padx=2, pady=2, column=4, row=2) 

    def equals(self): 
     try: 
      result = eval(self.results.get()) 
     except: 
      result = "Invalid input" 
     self.all_clear() 
     self.results.insert(0, result) 
    def zero(self): 
     self.results.insert(END, "0") 
    def bracket_one(self): 
     self.results.insert(END, "(") 
    def bracket_two(self): 
     self.results.insert(END, ")") 
    def all_clear(self): 
     self.results.delete(0, END) 
    def clear(self): 
     self.results.delete(-1) 
    def multiplication(self): 
     self.results.insert(END, "*") 
    def division(self): 
     self.results.insert(END, "/") 
    def addition(self): 
     self.results.insert(END, "+") 
    def subtraction(self): 
     self.results.insert(END, "-") 
    def decimal_point(self): 
     self.results.insert(END, ".")  

def about(): 
    messagebox.showinfo(title = "About", message = "Author") 
    return 
helpMenu = Menu(menubar) 
menubar.add_command(label = "About", command=about) 

if __name__ == '__main__': 
    Calculator().mainloop() 
    calculator.config(menu=menubar) 
    calculator.mainloop() 

回答

2

您的問題是您沒有將menubar與您的根應用程序相關聯。這就是爲什麼它永遠不會出現。您需要將您的應用程序的menu配置爲您創建的menubar。示例 -

calculator.configure(menu=menubar) 

此外,最好還是將該代碼移動到您的框架中。示例 -

from tkinter import * 
from tkinter import messagebox 
calculator = Tk() 
calculator.title("Calculator") 
calculator.geometry("317x145") 

menubar = Menu(calculator) 

class Calculator(Frame): 
    def __init__(self): 
     Frame.__init__(self) 
     display = Frame(calculator, bd=0, width=1000, height=1000, relief=SUNKEN) 
     buttons = Frame(calculator, bd=0, width=7, height=1, relief=GROOVE) 
     display.grid(column=0, row=0, padx=0, pady=0) 
     buttons.grid(column=0, row=1, padx=1) 
     numbers = StringVar() 
     self.results = Entry(display, textvariable=numbers, width=31, fg="DarkOrchid4", bg="lavender blush", font="Verdana") 
     self.results.pack() 
     self.results.grid(column=0, row=0) 

     def showup(x): 
      return lambda: self.results.insert(END, x) 

     numbers=["7", "4", "1", "8", "5", "2", "9", "6", "3"] 
     for i in range(9): 
      n=numbers[i] 
      Button(buttons, bg="snow", text=n, width=7, height=1, command=showup(n), relief=RAISED).grid(row=i%3, column=i//3) 

     Clear = Button(buttons, bg="snow", text="C", width=7, height=1, command=self.clear, relief=RAISED) 
     Clear.grid(padx=2, pady=2, column=3, row=0) 
     Equals = Button(buttons, bg="snow", text="=", width=7, height=1, command=self.equals, relief=RAISED) 
     Equals.grid(padx=2, pady=2, column=4, row=3) 
     All_clear = Button(buttons, bg="snow", text="AC", width=7, height=1, command=self.all_clear, relief=RAISED) 
     All_clear.grid(padx=2, pady=2, column=4, row=0) 
     Bracket_one = Button(buttons, bg="snow", text="(", width=7, height=1, command=self.bracket_one, relief=RAISED) 
     Bracket_one.grid(padx=2, pady=2, column=2, row=3) 
     Bracket_two = Button(buttons, bg="snow", text=")", width=7, height=1, command=self.bracket_two, relief=RAISED) 
     Bracket_two.grid(padx=2, pady=2, column=3, row=3) 
     Zero = Button(buttons, bg="snow", text="0", width=7, height=1, command=self.zero, relief=RAISED) 
     Zero.grid(padx=2, pady=2, column=0, row=3) 
     Decimal_point = Button(buttons, bg="snow", text=".", width=7, height=1, command=self.decimal_point, relief=RAISED) 
     Decimal_point.grid(padx=2, pady=2, column=1, row=3) 
     Multiplication = Button(buttons, bg="red", text="x", width=7, height=1, command=self.multiplication, relief=RAISED) 
     Multiplication.grid(padx=2, pady=2, column=3, row=1) 
     Division = Button(buttons, bg="powder blue", text="/", width=7, height=1, command=self.division, relief=RAISED) 
     Division.grid(padx=2, pady=2, column=4, row=1) 
     Addition = Button(buttons, bg="yellow", text="+", width=7, height=1, command=self.addition, relief=RAISED) 
     Addition.grid(padx=2, pady=2, column=3, row=2) 
     Subtraction = Button(buttons, bg="green", text="-", width=7, height=1, command=self.subtraction, relief=RAISED) 
     Subtraction.grid(padx=2, pady=2, column=4, row=2) 
     self.menubar = Menu(self) 
     def about(): 
      messagebox.showinfo(title = "About", message = "Author") 
      return 
     self.helpMenu = Menu(self.menubar) 
     self.menubar.add_cascade(label="Help",menu=self.helpMenu) 
     self.helpMenu.add_command(label = "About", command=about) 
     calculator.config(menu=self.menubar) 

    def equals(self): 
     try: 
      result = eval(self.results.get()) 
     except: 
      result = "Invalid input" 
     self.all_clear() 
     self.results.insert(0, result) 
    def zero(self): 
     self.results.insert(END, "0") 
    def bracket_one(self): 
     self.results.insert(END, "(") 
    def bracket_two(self): 
     self.results.insert(END, ")") 
    def all_clear(self): 
     self.results.delete(0, END) 
    def clear(self): 
     self.results.delete(-1) 
    def multiplication(self): 
     self.results.insert(END, "*") 
    def division(self): 
     self.results.insert(END, "/") 
    def addition(self): 
     self.results.insert(END, "+") 
    def subtraction(self): 
     self.results.insert(END, "-") 
    def decimal_point(self): 
     self.results.insert(END, ".")  


if __name__ == '__main__': 
    Calculator().mainloop() 
    calculator.config(menu=menubar) 
    calculator.mainloop() 
+0

謝謝你一堆。這沒有竅門:) –

+0

很高興我可以幫助:) –