用thinter, 写了一个计算器程序

from tkinter import *
from tkinter import messagebox
import win32api, win32con, time

class OrdinaryCalculator(object):
def __init__(self, win=None):
self.win = win
def windows(self):
self.root = Tk()
self.root.wm_attributes('-topmost', 1)
self.root.title("计算器")
self.root.geometry("280x480+800+500")
self.root.resizable(False, False)
self.text = Text(self.root, width=25, font=("微软雅黑", 15), height=7, bd=6)
self.text.pack()

f1 = Frame(self.root)
b1 = Button(f1, text="切换", width=4, height=1, font=("微软雅黑", 18), fg='white', bg="gray", command=self.handover)
b2 = Button(f1, text="← ", width=4, height=1, font=("微软雅黑", 18), fg='white', bg="orange", command=self.getDel)
b3 = Button(f1, text="AC", width=4, height=1, font=("微软雅黑", 18), fg='white', bg='red', command=self.getAC)
b4 = Button(f1, text="%", width=4, height=1, font=("微软雅黑", 18), fg='white', bg="gray", command=self.getPercent)
b1.pack(side=LEFT, padx=1, pady=1)
b2.pack(side=LEFT, padx=1, pady=1)
b3.pack(side=LEFT, padx=1, pady=1)
b4.pack(side=LEFT, padx=1, pady=1)
f1.pack()

f2 = Frame(self.root)
b5 = Button(f2, text="7", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.get7)
b6 = Button(f2, text="8", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.get8)
b7 = Button(f2, text="9", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.get9)
b8 = Button(f2, text="÷", width=4, height=1, font=("微软雅黑", 18), fg='white', bg="gray", command=self.getDevide)
b5.pack(side=LEFT, padx=1, pady=1)
b6.pack(side=LEFT, padx=1, pady=1)
b7.pack(side=LEFT, padx=1, pady=1)
b8.pack(side=LEFT, padx=1, pady=1)
f2.pack()

f3 = Frame(self.root)
b9 = Button(f3, text="4", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.get4)
b10 = Button(f3, text="5", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.get5)
b11 = Button(f3, text="6", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.get6)
b12 = Button(f3, text="x", width=4, height=1, font=("微软雅黑", 18), fg='white', bg="gray", command=self.getMultipleSign)
b9.pack(side=LEFT, padx=1, pady=1)
b10.pack(side=LEFT, padx=1, pady=1)
b11.pack(side=LEFT, padx=1, pady=1)
b12.pack(side=LEFT, padx=1, pady=1)
f3.pack()

f4 = Frame(self.root)
b13 = Button(f4, text="1", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.get1)
b14 = Button(f4, text="2", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.get2)
b15 = Button(f4, text="3", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.get3)
b16 = Button(f4, text="-", width=4, height=1, font=("微软雅黑", 18), fg='white', bg="gray", command=self.getMinus)
b13.pack(side=LEFT, padx=1, pady=1)
b14.pack(side=LEFT, padx=1, pady=1)
b15.pack(side=LEFT, padx=1, pady=1)
b16.pack(side=LEFT, padx=1, pady=1)
f4.pack()

f5 = Frame(self.root)
b17 = Button(f5, text="0", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.get0)
b18 = Button(f5, text=".", width=4, height=1, font=("微软雅黑", 18), bg="white", command=self.decimalPoint)
b19 = Button(f5, text="=", width=4, height=1, font=("微软雅黑", 18), bg="white",command=self.equalSign)
b20 = Button(f5, text="+", width=4, height=1, font=("微软雅黑", 18), fg='white', bg="gray", command=self.getPlusSign)
b17.pack(side=LEFT, padx=1, pady=1)
b18.pack(side=LEFT, padx=1, pady=1)
b19.pack(side=LEFT, padx=1, pady=1)
b20.pack(side=LEFT, padx=1, pady=1)
f5.pack()
self.Bool = False
self.root.bind("<Enter>", self.func) # 鼠标进入事件
self.Bool_ = True

self.root.mainloop()

def func(self, event=None):
if self.Bool_:
win32api.SetCursorPos([830, 680])
time.sleep(0.1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0) # 鼠标左键按下
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0)
self.Bool_ = False
else:
return

def getAC(self):
self.text.delete(1.0, END)

def getDel(self):
if self.text.get(1.0, END) == "\n":
return
self.Bool = False
data = list(self.text.get(1.0, END))
data.pop()
data.pop()
data = "".join(data)
self.getAC()
self.text.insert(1.0, data)

def getPercent(self):
data = self.text.get(1.0, END).strip('\n')
if "=" in data and self.Bool:
data_list = data.split(" = ")
self.text.insert(END, data_list[-1])
self.Bool = False
if len(data) > 0 and data[-1] in [ "%","+", "-", "×", "÷"]:
newData = data[:len(data) - 1] + "%"
self.getAC()
self.text.insert(END, newData)
else:
self.text.insert(END, "%")

def getDevide(self):
data = self.text.get(1.0, END).strip('\n')
if "=" in data and self.Bool:
data_list = data.split(" = ")
self.text.insert(END, data_list[-1])
self.Bool = False
if len(data) > 0 and data[-1] in ["+", "-", "×", "÷"]:
newData = data[:len(data) - 1] + "÷"
self.getAC()
self.text.insert(END, newData)
else:
self.text.insert(END, "÷")

def get7(self):
self.Bool = False
self.text.insert(END, "7")

def get8(self):
self.Bool = False
self.text.insert(END, "8")

def get9(self):
self.Bool = False
self.text.insert(END, "9")

def getMultipleSign(self):
data = self.text.get(1.0, END).strip('\n')
if "=" in data and self.Bool:
data_list = data.split(" = ")
self.text.insert(END, data_list[-1])
self.Bool = False
if len(data) > 0 and data[-1] in ["+", "-", "×", "÷"]:
newData = data[:len(data) - 1] + "×"
self.getAC()
self.text.insert(END, newData)
else:
self.text.insert(END, "×")

def get4(self):
self.Bool = False
self.text.insert(END, "4")

def get5(self):
self.Bool = False
self.text.insert(END, "5")

def get6(self):
self.Bool = False
self.text.insert(END, "6")

def getMinus(self):
data = self.text.get(1.0, END).strip('\n')
if "=" in data and self.Bool:
data_list = data.split(" = ")
self.text.insert(END, data_list[-1])
self.Bool = False
if len(data) > 0 and data[-1] in ["+", "-", "×", "÷"]:
newData = data[:len(data) - 1] + "-"
self.getAC()
self.text.insert(END, newData)
else:
self.text.insert(END, "-")

def get1(self):
self.Bool = False
self.text.insert(END, "1")

def get2(self):
self.Bool = False
self.text.insert(END, "2")

def get3(self):
self.Bool = False
self.text.insert(END, "3")

def getPlusSign(self):
data = self.text.get(1.0, END).strip('\n')
if "=" in data and self.Bool:
data_list = data.split(" = ")
self.text.insert(END, data_list[-1])
self.Bool = False
if len(data) > 0 and data[-1] in ["+", "-", "×", "÷"]:
newData = data[:len(data) - 1] + "+"
self.getAC()
self.text.insert(END, newData)
else:
self.text.insert(END, "+")

def handover(self):
self.root.destroy()
self.win.windows()


def get0(self):
self.Bool = False
self.text.insert(END, "0")

def decimalPoint(self):
self.text.insert(END, ".")

def equalSign(self):
try:
data = self.text.get(1.0, END).strip('\n').replace("×", "*").replace("÷", "/").replace("%", "*0.01")
data1 = self.text.get(1.0, "1.end").strip('\n').replace("×", "*").replace("÷", "/").replace("%", "*0.01")
data2 = self.text.get(2.0, "2.end").strip('\n').replace("×", "*").replace("÷", "/").replace("%", "*0.01")
data3 = self.text.get(3.0, "3.end").strip('\n').replace("×", "*").replace("÷", "/").replace("%", "*0.01")
data4 = self.text.get(4.0, "4.end").strip('\n').replace("×", "*").replace("÷", "/").replace("%", "*0.01")
data5 = self.text.get(5.0, "5.end").strip('\n').replace("×", "*").replace("÷", "/").replace("%", "*0.01")
data6 = self.text.get(6.0, "6.end").strip('\n').replace("×", "*").replace("÷", "/").replace("%", "*0.01")
data7 = self.text.get(7.0, "7.end").strip('\n').replace("×", "*").replace("÷", "/").replace("%", "*0.01")
if "=" not in data:
data = eval(data)
self.text.insert(END, " = " + str(data) + "\n")
elif "=" in data1 and data2 != "\n" and "=" not in data2:
data2 = eval(data2)
self.text.insert(END, " = " + str(data2) + "\n")
elif "=" in data2 and data3 != "\n" and "=" not in data3:
data3 = eval(data3)
self.text.insert(END, " = " + str(data3) + "\n")
elif "=" in data3 and data4 != "\n" and "=" not in data4:
data4 = eval(data4)
self.text.insert(END, " = " + str(data4) + "\n")
elif "=" in data4 and data5 != "\n" and "=" not in data5:
data5 = eval(data5)
self.text.insert(END, " = " + str(data5) + "\n")
elif "=" in data5 and data6 != "\n" and "=" not in data6:
data6 = eval(data6)
self.text.insert(END, " = " + str(data6) + "\n")
elif "=" in data6 and data7 != "\n" and "=" not in data7:
data7 = eval(data7)
self.text.insert(END, " = " + str(data7))
else:
return
self.Bool = True
except:
messagebox._show("温馨提示", "语法出错")

if __name__ == "__main__":
OC = OrdinaryCalculator()
OC.windows()

猜你喜欢

转载自www.cnblogs.com/zsb2019/p/10474396.html