chemical_equation_balancer/main.py

73 lines
2.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 这是一个示例 Python 脚本。
# 按 ⌃R 执行或将其替换为您的代码。
# 按 双击 ⇧ 在所有地方搜索类、文件、工具窗口、操作和设置。
import parser
import equation_solver
import tkinter
from tkinter import messagebox
from ttkbootstrap import Style
from validity_check import IllegalAtomException
# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
# 新建样式
style = Style('flatly')
# 创建窗口
window = style.master
window.title('化学方程式自动配平器')
window.geometry('500x140')
# 创建输入框
input_label = tkinter.Label(window, text='输入方程式:')
input_label.place(x=10, y=10)
input_entry = tkinter.Entry(window)
input_entry.place(x=100, y=10, width=300, height=30)
# 创建输出框
output_label = tkinter.Label(window, text='输出方程式:')
output_label.place(x=10, y=50)
output_entry = tkinter.Entry(window)
output_entry.place(x=100, y=50, width=300, height=30)
# 创建按钮
button = tkinter.Button(window, text='配平')
button.place(x=420, y=10, width=60, height=70)
# 创建菜单
menu = tkinter.Menu(window)
menu.add_command(label='关于',
command=lambda: messagebox.showinfo('关于', '化学方程式自动配平器\n作者lucas8485\n版本1.0'))
menu.add_command(label='帮助', command=lambda: messagebox.showinfo('帮助', '''输入方程式,点击配平按钮,即可得到配平后的方程式。
注意:方程式中的元素必须是化学元素的符号,
不能是化学元素的全称,且大小写敏感。
如果有分隔符,请不要输入分隔符。'''))
window.config(menu=menu)
# 事件绑定
def balance():
eq = input_entry.get()
try:
parsed_eq = parser.parse_equation(eq)
output_entry.delete(0, 'end')
except IllegalAtomException:
# 弹出错误提示
tkinter.messagebox.showerror('错误', '输入的方程式有误!')
return
except ValueError:
# 弹出错误提示
tkinter.messagebox.showerror('错误', '输入的方程式有误!')
return
try:
balanced_eq = equation_solver.solve_equation(parsed_eq)
except ValueError:
tkinter.messagebox.showerror('错误', '输入的方程式无法配平!')
return
output_entry.delete(0, tkinter.END)
output_entry.insert(0, parser.format_equation(balanced_eq))
button.bind('<Button-1>', lambda event: balance())
# 进入消息循环
window.mainloop()
# 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助